不同列中每个ID的唯一字符串的累积计数

A R*_*ob4 1 python pandas

我有一个数据框(df_temp),如下所示:

   ID1  ID2
0  A    X
1  A    X
2  A    Y
3  A    Y
4  A    Z
5  B    L
6  B    L
Run Code Online (Sandbox Code Playgroud)

我需要添加一列来显示每个ID1的ID2唯一值的累积数量,所以类似

   ID1  ID2   CumUniqueIDs
0  A    X     1
1  A    X     1
2  A    Y     2
3  A    Y     2
4  A    Z     3
5  B    L     1
6  B    L     1
Run Code Online (Sandbox Code Playgroud)

我试过了:

 dfl_temp['CumUniqueIDs'] = dfl_temp.groupby(by=[ID1])[ID2].nunique().cumsum()+1
Run Code Online (Sandbox Code Playgroud)

但这只是用NaN填充CumUniqueID。

不知道我在做什么错!任何帮助,不胜感激!

Max*_*axU 5

你可以使用groupby()+ transform()+ factorize()

In [12]: df['CumUniqueIDs'] = df.groupby('ID1')['ID2'].transform(lambda x: pd.factorize(x)[0]+1)

In [13]: df
Out[13]:
  ID1 ID2  CumUniqueIDs
0   A   X             1
1   A   X             1
2   A   Y             2
3   A   Y             2
4   A   Z             3
5   B   L             1
6   B   L             1
Run Code Online (Sandbox Code Playgroud)

  • 再次伸出手指。好答案。+1 (2认同)