【问题标题】:Count of a column and sum of another in the same groupby?同一groupby中的一列计数和另一列的总和?
【发布时间】:2019-02-24 14:33:31
【问题描述】:

这个数据框:

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 在一天内交付了一些东西。
  • 找到sumnumber_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')

错误类型错误:此 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

我只想在此表中将number_of_paperssum 也作为一个名为sum 的新列。

【问题讨论】:

  • 我认为您只是在第一个 groupby 语句中引用了错误的列。请改用number_of_papers。即df.groupby(['delivery_date','user'])['number_of_papers'].agg(['count','sum']).sort_index(level=[0,1], ascending=[False,True]).reset_index() 为我工作

标签: python pandas group-by


【解决方案1】:

你可以这样使用agg

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

【讨论】:

  • 计数在哪里?
  • 相信你会这样理解的
【解决方案2】:

agg 函数中使用字典进行与列相关的特定计算,然后使用rename 列和reset_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

【讨论】:

  • 我们可以用字典在.agg中声明每个计算是关于使用它的哪一列?
  • @user10389994 是的,这就是我所做的。检查答案中提供的链接。
  • 在 number_of_papers 为 float64 的另一个数据集中,我得到:TypeError: reduction operation 'sum' not allowed for this dtype
  • @user10389994 它适用于float64 仔细检查dtype。我测试它有效。如果您想尝试将number_of_papers 替换为[3.,4.0,3.,2.,4.] 并尝试我的解决方案。它有效。
  • using a dict on a Series for aggregation is deprecated and will be removed in a future version
猜你喜欢
  • 2020-01-16
  • 2020-07-11
  • 2021-01-18
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
相关资源
最近更新 更多