关于ZAKER 融媒体解决方案 合作 加入

使用 pandas GroupBy.agg ( ) 的同一列的多个聚合

CocoaChina 09-19

给出以下 ( 完全矫枉过正的 ) 数据框示例

import pandas as pdimport datetime as dtdf = 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 ) } )

是否存在将两个不同的聚合函数应用于同一列的现有内置方法 , 而无需多次调用 agg?

语法上错误但直观正确的方法是:

# Assume `function1` and `function2` are defined for aggregating.df.groupby ( "dummy" ) .agg ( {"returns":function1, "returns":function2} )

显然 ,Python 不允许重复键 . 有没有其他方式表达对 agg 的输入?也许元组列表 [ ( 列 , 函数 ) ] 可以更好地工作 , 以允许多个函数应用于同一列?但它似乎只接受一本字典 .

除了定义一个仅应用其中的两个函数的辅助函数之外 , 还有一个解决方法吗? ( 无论如何 , 它如何与聚合一起工作? )

最佳答案

您只需将这些函数作为列表传递:

In [ 20 ] : df.groupby ( "dummy" ) .agg ( {"returns": [ np.mean, np.sum ] } ) Out [ 20 ] : returns sum meandummy 1 0.285833 0.028583

或者作为字典:

In [ 21 ] : df.groupby ( 'dummy' ) .agg ( {'returns': {'Mean': np.mean, 'Sum': np.sum}} ) Out [ 21 ] : returns Sum Meandummy 1 0.285833 0.028583

以上内容由"CocoaChina"上传发布 查看原文

觉得文章不错,微信扫描分享好友

扫码分享