【发布时间】:2017-10-11 17:25:54
【问题描述】:
我之前问过这个问题:python pandas: applying different aggregate functions to different columns 但是熊猫的最新变化https://github.com/pandas-dev/pandas/pull/15931 意味着我认为是一个优雅和 Pythonic 的解决方案已被弃用,原因我真的无法理解。
问题是,现在仍然是:在进行 groupby 时,我如何将不同的聚合函数应用于不同的字段(例如 x 的总和、x 的平均值、y 的最小值、z 的最大值等)并重命名结果字段,一次完成,或者至少以一种可能是pythonic且不太麻烦的方式? IE。 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
谢谢!
【问题讨论】:
-
但是,正如@ErnestScribbler 对该答案的评论,这并不能解决重命名问题。我想它必须手动完成?对于包含大量列的大型数据框,这意味着我不仅必须替换旧代码,而且新代码要长得多。这都是为什么???
-
我也很难理解为什么要这样做。感觉如此令人难以置信的 unpythonic 并且很快变得非常麻烦,特别是如果我不知道新列将如何实际命名。也许在 github 上打开另一个关于此的线程会有所帮助?感觉就像糟糕的设计:-(
-
令人沮丧的是,即使没有必要,我也不得不使用 PySpark,因为我更喜欢这种语法:df.groupby("col1").agg(F.col(col2).mean( ).alias("myaggcolumn"), F.col(col3).max().alias("mymaxcolumn")。无论聚合函数吐出什么,立即清楚列名是什么。我可以注释掉/在单行中,无需更改任何其他内容