Python数据集聚合

时间:2018-01-10 13:28:37

标签: python pandas aggregation

我有一个如下数据集,存储在pd.DataFrame对象:

df

    topic  student level week
 1   sun      a       1     1
 1   sun      b       2     1
 1   moon     a       3     1
 2   tree     a       1     2
 2   tree     b       2     2
 2   tree     a       3     2
 2   tree     b       4     2
 3   cloud    c       1     2
 3   cloud    b       2     2
 3   cloud    c       3     2
 3   cloud    a       4     2
 3   house    b       5     2

我想将每个包含id列的列聚合为学生数和消息数。

id  topic  num_students num_messages
 1   sun      2            2
 1   moon     1            1
 2   tree     2            4
 3   cloud    3            4
 3   house    1            1

其中num_students是每个ID /主题对student中唯一df1的数量,num_messages个ID /主题对的数量。

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

我认为您需要agg汇总功能nuniquesize

d = {'nunique':'num_students','size':'num_messages'}
df1 = (df.groupby(['id','topic'], sort=False)['student']
         .agg(['nunique','size'])
         .rename(columns=d)
         .reset_index())
print (df1)
   id  topic  num_students  num_messages
0   1    sun             2             2
1   1   moon             1             1
2   2   tree             2             4
3   3  cloud             3             4
4   3  house             1             1