Python 在表中循环,按其他列上的条件更改值
我目前正在尝试根据另一列的值更改panda列的值。到目前为止没有问题,但我希望遍历这两列,以便按照下面的示例设置我的表: 我有一张这样的熊猫桌:Python 在表中循环,按其他列上的条件更改值,python,pandas,loops,iterator,Python,Pandas,Loops,Iterator,我目前正在尝试根据另一列的值更改panda列的值。到目前为止没有问题,但我希望遍历这两列,以便按照下面的示例设置我的表: 我有一张这样的熊猫桌: 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 1 0 1 0 1 0 2 0 2 0 2 0 ... i
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
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
我是编程新手,我尝试的所有循环都失败了。如果有人能告诉我怎么做,我会非常感激的 将cumsum()与groupby()一起使用
输出:
id id2
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
也许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)
关键是“方法”参数,您可以通过文档熊猫了解更多信息。如果您使用
.loc
,则应该可以。我不明白输出不符合要求。你好吗?按n
循环,即范围(10)?您是否更改了m
的值?因为如果您不这样做,那么每次循环时,相应的n
都将更改,但更改为相同的50
。非常感谢,这正是我正在搜索的!有没有办法从0开始而不是1?你可以使用add(-1)
likedf['id2']=df.groupby('id')['id2'].cumsum().add(-1)