Groupby并在pandas中执行多个函数的聚合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groupby并在pandas中执行多个函数的聚合相关的知识,希望对你有一定的参考价值。

我有以下数据帧:

date          in   out  balance

01/01/2017    50    70    100
02/01/2017    100   10    190
...           ...   ...   ...

我正在使用以下代码创建摘要文件(按月分组):

df2 = df.groupby(pd.TimeGrouper(freq='M'))
df2 = df.agg({'total_in': 'sum', 'total_out': 'sum', 'balance': 'last'})

但是,我也希望创建“最大的”和“最大的”列。

我尝试了以下内容

df2 = df2.agg({'total_in': 'sum', 'total_out': 'sum', 'largest in': 'max', 'largest out': 'max', 'balance': 'last'})

但是,这会为新列引发键错误。我曾希望我可以在Agg语句中创建新列,但似乎并非如此。

现在我可以在普通数据库中添加这些列 - 但这些值在每天的基础上相对没有意义,而且似乎是浪费处理能力/应该能够更有效地完成的事情。

有一个更好的方法吗?

答案

这里有几点需要注意 -

  1. agg采取dict。在这种情况下,键是用于执行聚合的列,值是函数或函数列表。
  2. pd.TimeGrouper已被弃用(自v0.21起)。请改用pd.Grouper

这是我建议做的,假设date不是索引的一部分 -

f = {
        'in'      :  [('total_in', sum), ('largest_in', max)], 
        'out'     :  [('total_out', sum), ('largest_out', max)], 
        'balance' :  'last'
}
df = df.groupby(pd.Grouper(key='date', freq='1M')).agg(f)

每个元组由两个元素组成 - 第一个元素(例如,total_in)是结果列的名称,而第二个元素(例如,sum)是应用于键的函数。输出将是带有MultiIndex列的数据框。

请注意,如果key='date'已经是索引的一部分,您可以删除date位。

以上是关于Groupby并在pandas中执行多个函数的聚合的主要内容,如果未能解决你的问题,请参考以下文章

pandas聚合和分组运算之groupby

数据分析—Pandas 中的分组聚合Groupby 高阶操作

pandas编写自定义函数计算多个数据列的加和(sum)使用groupby函数和apply函数聚合计算分组内多个数据列的加和

Pandas`agc`列表,“AttributeError / ValueError:函数不减少”

pandas使用groupby函数按照多个分组变量进行分组聚合统计使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)

pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值