将不同的聚合函数应用于不同的列(现在不推荐使用重命名的dict)

时间:2017-10-11 17:25:54

标签: python pandas group-by

之前我曾问过这个问题:python pandas: applying different aggregate functions to different columns 但是熊猫https://github.com/pandas-dev/pandas/pull/15931的最新变化 意味着我认为优雅和pythonic的解决方案已被弃用,原因我真的不明白。

问题是,现在仍然是:在进行groupby时,如何将不同的聚合函数应用于不同的字段(例如x的总和,x的平均值,y的最小值,z的最大值等)并重命名结果领域,一气呵成,或者至少以一种可能的pythonic而不是太麻烦的方式?即sum_x不会这样做,我需要明确重命名字段。

这种方法,我喜欢:

df.groupby('qtr').agg({"realgdp": {"mean_gdp": "mean", "std_gdp": "std"},
                                "unemp": {"mean_unemp": "mean"}})

将被弃用,现在会产生此警告:

FutureWarning: using a dict with renaming is deprecated and will be removed in a future version

谢谢!

1 个答案:

答案 0 :(得分:2)

不推荐使用

agg(),但使用agg重命名是。

请仔细阅读文档:https://pandas.pydata.org/pandas-docs/stable/whatsnew.html#deprecate-groupby-agg-with-a-dictionary-when-renaming

弃用的内容: 1.将dict传递给分组/滚动/重采样系列,允许其重命名生成的聚合 2.将dict-of-dicts传递给分组/滚动/重新采样的DataFrame。

虽然它不是一行代码

,但这样可行
df.groupby('qtr').agg({"realgdp": ["mean",  "std"], "unemp": "mean"})

df.columns = df.columns.map('_'.join)

df.rename(columns = {'realgdp_mean': 'mean_gdp', 'realgdp_std':'std_gdp', 'unemp_mean':'mean_unemp'}, inplace = True)