是否有 pandas 内置方法可以将两个不同的聚合函数f1, f2应用于同一列df["returns"],而无需agg()多次调用?
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()似乎它只接受字典。
[(column, function)]
除了定义一个仅应用其中两个函数的辅助函数之外,还有其他解决方法吗?(无论如何,这将如何与聚合一起工作?)
您可以简单地将函数作为列表传递:
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))