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语句中创建新列,但似乎并非如此。
现在我可以在普通数据库中添加这些列 - 但这些值在每天的基础上相对没有意义,而且似乎是浪费处理能力/应该能够更有效地完成的事情。
有一个更好的方法吗?
这里有几点需要注意 -
agg
采取dict
。在这种情况下,键是用于执行聚合的列,值是函数或函数列表。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编写自定义函数计算多个数据列的加和(sum)使用groupby函数和apply函数聚合计算分组内多个数据列的加和
Pandas`agc`列表,“AttributeError / ValueError:函数不减少”
pandas使用groupby函数按照多个分组变量进行分组聚合统计使用agg函数计算分组的多个统计指标(grouping by multiple columns in dataframe)
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值