开发者社区> 问答> 正文

使用panda GroupBy.agg()对同一列进行多个聚合

是否有一种内置的方式来应用两个不同的聚合函数f1, f2到同一个列df["returns"],而不必多次调用agg() ? 示例dataframe:

import pandas as pd
import datetime as dt

pd.np.random.seed(0)
df = 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)
}) 

语法上是错误的,但直觉上是正确的做法是:

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

显然,Python不允许复制键。有没有其他方式来表示agg()的输入?也许元组列表[(列,函数)]工作得更好,允许多个函数应用到同一列?但是agg()似乎只接受字典。 除了定义一个辅助函数来应用它里面的两个函数,还有其他的方法吗?(这将如何与聚合一起工作呢?) 问题来源StackOverflow 地址:/questions/59380335/how-can-i-improve-this-pandas-data-transformation-to-be-more-efficient

展开
收起
kun坤 2019-12-28 14:23:56 609 0
1 条回答
写回答
取消 提交回答
  • 你可以简单地通过一个列表的功能:

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

    或者作为字典:

    In [21]: df.groupby('dummy').agg({'returns':
                                      {'Mean': np.mean, 'Sum': np.sum}})
    Out[21]: 
            returns          
               Mean       Sum
    dummy                    
    1      0.036901  0.369012
    
    2019-12-28 14:24:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Get rid of traditional ETL, Move to Spark! 立即下载
对 2000 多亿条数据做一次 group by 需要多久? 立即下载
对2000多亿条数据做一次Group By 需要多久 立即下载