在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,使用groupby
和cumcount
累计计算唯一值。然后,只是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