Python Groupby并使用pandas中的多个函数执行聚合
我有以下数据帧:Python Groupby并使用pandas中的多个函数执行聚合,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,我有以下数据帧: 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
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
)是应用于键的函数。输出将是一个带有多索引
列的数据帧
请注意,如果
date
已经是索引的一部分,您可以删除key='date'
位。不,它不是这样工作的。关键是要操作的列。该值是一个函数或函数列表。您可以执行{'total_in':['sum','max']…}
以应用多个聚合,但最终会在中为total_创建一个分级列。我可以使用您的代码创建我想要的CSV。非常感谢(祝你新年快乐!)