应用不同的聚合函数不同的列(现在重命名该字典已过时)
我曾问过这个问题之前:python pandas: applying different aggregate functions to different columns 但最新的变化大熊猫https://github.com/pandas-dev/pandas/pull/15931 意味着什么,我想到的是一个优雅和Python的解决方案已被弃用,原因我真的不明白。应用不同的聚合函数不同的列(现在重命名该字典已过时)
问题是,现在仍然是:在做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
谢谢!
agg()不被弃用,但使用agg重命名。
什么是弃用: 1.传递一个字典的分组/热轧/重采样,允许一个重命名所产生的聚集 2.传递的字典-OF-系列字典到分组/滚动/重采样的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)
我会想到 r.columns = [''.join(col).strip()col in r.columns.values]但你的行少了个字符! 感谢您的澄清。我仍然很难理解为什么地球上这是被弃用的。消除向后兼容性应该是最后的手段。改变所有现有的代码是一个巨大的痛苦。我看到了缺点,我没有看到一个优势! –
其实,如果我在同一列上使用多个lambda函数(例如,计算%的总和和count的百分比),重命名仍然是个问题,因为那么我最终会得到两个同名的列,两个x_lambda –
Zetrin对2017年10月12日发表的评论比我的更有说服力:https://github.com/pandas-dev/pandas/pull/15931 –
单行你来到这里的答案https://stackoverflow.com/questions/44635626/pandas-aggregation-warning-futurewarning-using-a -dict-with-renaming-is-depreca – Wen
但是,正如@ErnestScribbler对这个答案发表评论,那不涉及重命名。我想它必须手动完成?对于有大量列的大型数据框,这意味着我不仅需要替换旧的代码,而且新代码还要更长。所有这些为什么? –