分组后,我想创建一个新列,其中包含时间序列中过去条目的唯一值。
尝试使用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
按用户排序(输出):
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
最佳答案
我认为这里应该稍微修改拉斐尔的答案,并按组向前填充:
df['uniq_ebe'] = (df.drop_duplicates(['user', 'prod'])
.groupby('user')['prod']
.cumcount()
.add(1)
.reindex(df.index)
.groupby(df['user'])
.ffill()
.astype(int))
print (df)
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.3 z 3
7 b 1.3 x 3
关于python - 如何在组内逐条查找唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719999/