Python根据其他两列添加具有重复值的新列

时间:2020-11-12 09:54:20

标签: python pandas

我有以下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

实现此目标的最佳方法是什么? 非常感谢。

1 个答案:

答案 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)