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

时间:2018-05-31 12:56:35

标签: python-3.x pandas dataframe etl data-analysis

  1. 考虑一个pandas数据帧
  2. enter image description here

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

    enter image description here

    建议 (我尝试分组似乎我增加了我有百万行的复杂性)

    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

3 个答案:

答案 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)

您可以使用value_counts

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

如果我理解你正在尝试做什么