我有以下df:
Doc Item
1 1
1 1
1 2
1 3
2 1
2 2
我想添加第三列,其重复值是:(1)如果“ Item”列中有更改,则递增一,并且(2)如果“ Doc”列中有更改,则应重新启动
Doc Item NewCol
1 1 1
1 1 1
1 2 2
1 3 3
2 1 1
2 2 2
实现此目标的最佳方法是什么? 非常感谢。
答案 0 :(得分:2)
将GroupBy.transform
与自定义lambda函数一起使用,factorize
:
df['NewCol'] = df.groupby('Doc')['Item'].transform(lambda x: pd.factorize(x)[0]) + 1
print (df)
Doc Item NewCol
0 1 1 1
1 1 1 1
2 1 2 2
3 1 3 3
4 2 1 1
5 2 2 2
如果Item
中的值是整数,则可以使用GroupBy.rank
:
df['NewCol'] = df.groupby('Doc')['Item'].rank(method='dense').astype(int)