Python Pandas:同一列的多个聚合

鉴于以下(完全矫枉过正)数据框架的例子

df = pandas.DataFrame({ "date":[datetime.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不允许重复的键。 有没有其他的方式来expression对agg ? 也许一个元组列表[(column, function)]会更好地工作,以允许多个函数应用于同一列? 但它似乎只接受字典。

除此之外,是否还有一个解决方法是定义一个辅助函数,而这个辅助函数只适用于它里面的两个函数? (这将如何与聚合无论如何?)

您可以简单地将函数作为列表传递:

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

或作为字典:

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

会这样的工作:

 In [7]: df.groupby('dummy').returns.agg({'func1' : lambda x: x.sum(), 'func2' : lambda x: x.prod()}) Out[7]: func2 func1 dummy 1 -4.263768e-16 -0.188565