小编典典

使用 pandas GroupBy.agg() 对同一列进行多个聚合

all

是否有 pandas 内置方法可以将两个不同的聚合函数f1, f2应用于同一列df["returns"],而无需agg()多次调用?

示例数据框:

import pandas as pd
import datetime as dt
import numpy as np

pd.np.random.seed(0)
df = pd.DataFrame({
         "date"    :  [dt.date(2012, x, 1) for x in range(1, 11)], 
         "returns" :  0.05 * np.random.randn(10), 
         "dummy"   :  np.repeat(1, 10)
})

语法错误但直觉上正确的方法是:

# Assume `f1` and `f2` are defined for aggregating.
df.groupby("dummy").agg({"returns": f1, "returns": f2})

显然,Python 不允许重复键。有没有其他方式来表达输入agg()?也许元组列表[(column, function)]会更好,以允许将多个函数应用于同一列?但agg()似乎它只接受字典。

除了定义一个仅应用其中两个函数的辅助函数之外,还有其他解决方法吗?(无论如何,这将如何与聚合一起工作?)


阅读 69

收藏
2022-06-18

共1个答案

小编典典

您可以简单地将函数作为列表传递:

In [20]: df.groupby("dummy").agg({"returns": [np.mean, np.sum]})
Out[20]:         
           mean       sum
dummy                    
1      0.036901  0.369012

或作为字典:

In [21]: df.groupby('dummy').agg({'returns':
                                  {'Mean': np.mean, 'Sum': np.sum}})
Out[21]: 
        returns          
           Mean       Sum
dummy                    
1      0.036901  0.369012

为了避免弃用警告:

df.groupby('dummy').agg(Mean=('returns', np.mean),
                        Sum=('returns', np.sum))
2022-06-18