python - 如何在组内逐条查找唯一值?

标签 python python-3.x pandas pandas-groupby

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

尝试使用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/

相关文章:

mysql - Tweepy 信息写入 MySQL - 文本被截断

python - 如何从多个常见元素的嵌套列表创建数据框

python - 替换 Pandas 列中的字符串

python - 计算唯一对并将计数存储在矩阵中

python - MySQL备份-警告密码不安全

python - 如何在 seaborn 中获得 2 个独立的地 block ?

python-3.x - 如何使用 Python 3.5 让 Sphinx 在 PyCharm 中工作

python - 在 Python 中非阻塞地收集子进程输出

python - 值小于行的计数总和

python - 名称错误 : name 'build' is not defined