在grouping之后,我想创建一个新列,其中包含时间序列中过去条目的唯一值。

尝试使用nunique变换,但它给出了整个组的唯一值

data={'user':['a','a','b','a','b','a','a','b'],
'time':[1,1.1,1.2,1.2,1.3,1.3,1.3,1.3],'prod':   ['k','k','t','t','y','k','z','x']}
df=pd.DataFrame(data)
df
   user time    prod
0   a   1.0     k
1   a   1.1     k
2   b   1.2     t
3   a   1.2     t
4   b   1.3     y
5   a   1.3     k
6   a   1.4     z
7   b   1.4     x

现在我想要的是gropby('user',sort ='time')并获得唯一的数量 “prod”列中的值按条目输入。

预期产量:

user time    prod  uniq_ebe
0   a   1.0     k  1
1   a   1.1     k  1 
2   b   1.2     t  1
3   a   1.2     t  2
4   b   1.3     y  2
5   a   1.3     k  2
6   a   1.4     z  3
7   b   1.4     x  3

按用户(output)排序:

   user time    prod  unique_ebe
0   a   1.0     k     1
1   a   1.1     k     1
2   a   1.2     t     2
3   a   1.3     k     2
4   a   1.4     z     3
5   b   1.2     t     1
6   b   1.3     y     2
7   b   1.4     x     3
分析解答

IIUC,使用groupbycumcount累计计算唯一值。然后,只是reindex

df.drop_duplicates(['user', 'prod'])\
  .groupby('user')['prod']\
  .cumcount()\
  .add(1)\
  .reindex(df.index)\
  .ffill()

  user  time prod  uniq_sbe
0    a   1.0    k       1.0
1    a   1.1    k       1.0
2    b   1.2    t       1.0
3    a   1.2    t       2.0
4    b   1.3    y       2.0
5    a   1.3    z       3.0
6    b   1.3    x       3.0