gpt4 book ai didi

python - Groupby 并在 pandas 中执行具有多种功能的聚合

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:07 24 4
gpt4 key购买 nike

我有以下数据框:

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 列的数据框。

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

关于python - Groupby 并在 pandas 中执行具有多种功能的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48044859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com