同一组中的一列的计数和另一列的总和?

时间:2018-09-20 09:58:52

标签: python pandas group-by

此数据框:

df = pd.DataFrame({'delivery_date' : ['2018-09-07' ,'2018-09-07','2018-09-08','2018-09-09','2018-09-10'],
              'user' : ['user1','user1','user2','user3','user3'],
             'number_of_papers' : [3,4,3,2,4]}) 

我想按delivery_dateuser进行分组。其中:

  • 发现count在一天之内交付某物的次数user
  • 找到sum中的number_of_papers

我使用了.agg,但由于countsum属于不同的列,因此我认为它在这里不适用。

df.groupby(['delivery_date','user'])['delivery_date'].agg(['count','sum']).sort_index(level=[0,1], ascending=[False,True]).reset_index(name ='Counts')
  

错误TypeError:此dtype不允许归约运算'sum'

总和应为number_of_papers。我不知道在groupby中写什么。

示例: 除sum部分外,此操作全部完成:

a.groupby(['delivery_date','user'])['delivery_date'].count().sort_index(level=[0,1], ascending=[False,True]).reset_index(name ='counts')

给予:

delivery_date   user    counts
0   2018-09-10  user3   1
1   2018-09-09  user3   1
2   2018-09-08  user2   1
3   2018-09-07  user1   2

我只是想同时在此表中将sum的{​​{1}}作为一个名为number_of_papers的新列。

2 个答案:

答案 0 :(得分:2)

agg函数中使用字典进行与列有关的特定计算,然后对列renamereset_index进行相关计算:

df.groupby(['delivery_date','user']).agg({'delivery_date':'count','number_of_papers':'sum'}).\
                                     sort_index(level=[0,1], ascending=[False,True]).\
                                     rename(columns={'delivery_date':'count','number_of_papers':'sum'}).\
                                     reset_index()

    delivery_date   user    count   sum
0   2018-09-10      user3   1       4
1   2018-09-09      user3   1       2
2   2018-09-08      user2   1       3
3   2018-09-07      user1   2       7

答案 1 :(得分:1)

您可以通过这种方式使用agg

enter image description here

    df.groupby(['delivery_date', 'user'])['number_of_papers'].agg('sum')