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

时间:2017-11-01 15:00:21

标签: 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

我需要的是添加一个列,显示每个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

我试过了:

 dfl_temp['CumUniqueIDs'] = dfl_temp.groupby(by=[ID1])[ID2].nunique().cumsum()+1

但这只是用NaN填充CumUniqueIDs。

不确定我在这里做错了什么!任何帮助非常感谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

使用else { windowHeight = $(window).innerHeight(); $('.nanoContainer, .flexAligner, .home .intro').css('min-height', (windowHeight - 88));

category

分配后

df.groupby(['ID1']).ID2.apply(lambda x : x.astype('category').cat.codes.add(1))
Out[551]: 
0    1
1    1
2    2
3    2
4    3
5    1
6    1
Name: ID2, dtype: int8