2017-10-11 42 views
2

我曾問過這個問題之前: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 

謝謝!

+0

單行你來到這裏的答案https://stackoverflow.com/questions/44635626/pandas-aggregation-warning-futurewarning-using-a -dict-with-renaming-is-depreca – Wen

+1

但是,正如@ErnestScribbler對這個答案發表評論,那不涉及重命名。我想它必須手動完成?對於有大量列的大型數據框,這意味着我不僅需要替換舊的代碼,而且新代碼還要更長。所有這些爲什麼? –

回答

1

agg()不被棄用,但使用agg重命名。

幹什麼去了,可通過文檔:https://pandas.pydata.org/pandas-docs/stable/whatsnew.html#deprecate-groupby-agg-with-a-dictionary-when-renaming

什麼是棄用: 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) 
+0

我會想到 r.columns = [''.join(col).strip()col in r.columns.values]但你的行少了個字符! 感謝您的澄清。我仍然很難理解爲什麼地球上這是被棄用的。消除向後兼容性應該是最後的手段。改變所有現有的代碼是一個巨大的痛苦。我看到了缺點,我沒有看到一個優勢! –

+0

其實,如果我在同一列上使用多個lambda函數(例如,計算%的總和和count的百分比),重命名仍然是個問題,因爲那麼我最終會得到兩個同名的列,兩個x_lambda –

+0

Zetrin對2017年10月12日發表的評論比我的更有說服力:https://github.com/pandas-dev/pandas/pull/15931 –

相關問題