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