具有多个 groupby 的特定值的唯一列值的数值聚合

Numerical aggregate of unique column value by particular value with multiple groupby

  1. 考虑一个 pandas 数据框

用户基于 r_no 基于相同值打开的唯一 cam_id 的数值聚合 输出应该像

建议 (我试过 group by 似乎我增加了复杂性我有一百万行)

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

您可以使用 value_counts

df['value_count'] = df['r_no'].value_counts()

如果我明白你想做什么

这应该可以解决问题:

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)

使用:

(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