用户在基于r_no的相同值上打开的唯一cam_id的数字聚合 和输出应该像
建议 (我尝试分组似乎我增加了我有百万行的复杂性)
df = pd.DataFrame()
df['r_no'] = [1,1,1,2,3,1,1,1,2]
df['user'] = ['sam','sam','sam','sam','peter','jack','jack','Kris','peter']
df['value'] = [76,76,7,8,8,2,29,2,8]
df['cam_id'] = ['ab','abc','ab','ab','ab','abcd','abcd','abcd','ab']
df
答案 0 :(得分:3)
使用:
(df.merge(df[df['r_no.']==1].groupby(['r_no.','user','value'])['cam_id']
.nunique()
.rename('count_unique').reset_index(),
on=['r_no.','user','value'], how='left').fillna(0))
输出:
r_no. user value cam_id count_unique
0 1 sam 76 ab 2.0
1 1 sam 76 abc 2.0
2 1 sam 7 ab 1.0
3 2 sam 8 ab 0.0
4 2 peter 8 ab 0.0
5 1 jack 2 abcd 1.0
6 1 jack 29 abcd 1.0
7 1 kris 2 abcd 1.0
8 2 peter 8 ab 0.0
答案 1 :(得分:2)
这应该可以解决问题:
unique_count = df.loc[df['r_no']==1].groupby(['user','value'])['cam_id']\
.nunique()\
.rename('count_unique')
df = df.join(unique_count, on=['user','value']).fillna(0)
答案 2 :(得分:0)