Pandas:从列到唯一值的总和值

时间:2017-09-05 16:28:08

标签: python pandas

我有数据框

ID    time    coeff   category
111    12      1.5     shop
111    15      1.5       shop
222    12      0.8     shop
222    18      0.8     shop

我需要

category    unique_users
 shop         2.3

如果我尝试

result = df.groupby(['category']).agg({'ID': pd.Series.nunique}).rename(columns={ 'member_id': 'unique_users'}).reset_index()

我得到2,因为它返回df.ID的唯一身份。如何将df.coeff中的值与唯一df.ID相加?

3 个答案:

答案 0 :(得分:7)

这是一种方式

In [2314]: (df.groupby('category')
              .apply(lambda x: x.groupby('ID').coeff.first().sum())
              .reset_index(name='unique_users'))
Out[2314]:
  category  unique_users
0     shop           2.3

答案 1 :(得分:3)

使用drop_duplicates

df.drop_duplicates(['ID','category']).groupby('category').agg({'coeff':'sum'})
    Out[763]: 
              coeff
    category       
    shop        2.3

答案 2 :(得分:1)

这应该做你想做的事:

df.drop_duplicates(subset=['ID']).groupby(['category']).agg(sum).drop(['ID', 'time'], axis=1)

Out[133]: 
          coeff
category       
shop        2.3