循环遍历熊猫表,按条件更改其他列的值

Posted

技术标签:

【中文标题】循环遍历熊猫表,按条件更改其他列的值【英文标题】:Looping through pandas table, changing value by condition on other column 【发布时间】:2019-01-16 15:13:48 【问题描述】:

我目前正在尝试根据另一个列值更改熊猫列的值。到目前为止没问题,但我想遍历两列以设置我的表,如下例所示:

我有一个这样的熊猫表:

id  id2
1    0
1    0
1    0
2    0
2    0
2    0
...

我想得到这样的东西:

id  id2
1    1
1    2
1    3
2    1
2    2
2    3
...

所以我必须以某种方式检查id 列的值,并根据它更改id2 的值。到目前为止,我只有那个:

n=1
m=50
df.loc[df.id==n, 'id2'] = m

这给了我以下输出,但不是我想要做的:

 id  id2
 1   50
 1   50
 1   50
 2   50
 2   50
 2   50

我是编程新手,我尝试的所有循环都失败了。如果有人能解释我该怎么做,我将非常感激!

【问题讨论】:

如果你使用.loc 应该没问题。我不明白输出不符合预期。你是怎么做的?循环n 即范围(10)?您是否更改了m 的值?因为如果您不这样做,那么每次循环时,相应的n 将被更改,但相同的50 【参考方案1】:

也许DataFrame.rank() 方法是你需要的。

例子:

import pandas as pd
df = pd.DataFrame('id1':[1,1,1,2,2,2,3,3],'id2':[0,0,0,0,0,0,0,0])
df['dummy_rank'] = df['id2'].groupby(df['id1']).rank(method='first').apply(int)

关键是“方法”参数,您可以通过文档熊猫了解更多信息。

【讨论】:

【参考方案2】:

将 cumsum() 与 groupby() 一起使用

df = pd.DataFrame('id':[1,1,1,2,2,2], 'id2':[0,0,0,0,0,0])

df['id2'] =1
df['id2'] = df.groupby('id')['id2'].cumsum()
print(df)

输出:

   id  id2
0   1    1
1   1    2
2   1    3
3   2    1
4   2    2
5   2    3

【讨论】:

非常感谢,这正是我正在寻找的! 有没有办法从 0 开始而不是从 1 开始? @Mauritius 你可以使用add(-1)df['id2'] = df.groupby('id')['id2'].cumsum().add(-1)

以上是关于循环遍历熊猫表,按条件更改其他列的值的主要内容,如果未能解决你的问题,请参考以下文章

如何循环遍历熊猫数据框,并有条件地将值分配给变量的一行?

循环遍历表值函数

循环遍历熊猫中的行[重复]

有条件地格式化 Python 熊猫单元格

有没有一种有效的方法来计算 Pandas 中的列值,使用基于其他列的条件值的前行的值?

如何循环遍历行,然后在每行循环遍历列直到找到NA,然后提取前一列的值