Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Groupby并使用pandas中的多个函数执行聚合_Python_Pandas_Dataframe_Group By_Pandas Groupby - Fatal编程技术网

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。非常感谢(祝你新年快乐!)