【问题标题】:Apply conditional aggregation on a pandas groupby dataframe在 pandas groupby 数据帧上应用条件聚合
【发布时间】:2018-02-03 07:08:18
【问题描述】:

我有一个包含以下数据的数据框

date       type       value
1/1/2016   a          1
1/1/2016   b          2
1/1/2016   a          1
1/1/2016   b          4
1/2/2016   a          1
1/2/2016   b          1

我试图弄清楚如何在按日期分组后创建条件聚合器,以在全天和特定类型中执行操作,输出如下

date       sum_value    avg_value    a_sum     a_max    b_sum    b_max
1/1/2016   8            2            2         1        6        4     
1/2/2016   2            1            1         1        1        1

【问题讨论】:

    标签: python pandas dataframe group-by pandas-groupby


    【解决方案1】:

    您需要分两步处理此问题。第一步是仅通过df.groupby 调用date 获取meansum

    x = df.groupby('date').value.agg(['mean', 'sum'])
    print(x)
    
              mean  sum
    date               
    1/1/2016     2    8
    1/2/2016     1    2
    

    接下来的 4 列需要在 datetype 上进行分组,然后进行取消堆叠。

    y = df.groupby(['date', 'type']).value.agg(['sum', 'max']).unstack()
    y.columns = ['_'.join(col) for col in x.columns.values] # https://stackoverflow.com/a/45878539/4909087
    print(y)
    
              sum_a  sum_b  max_a  max_b
    date                                
    1/1/2016      2      6      1      4
    1/2/2016      1      1      1      1
    

    现在,连接 xy

    res = pd.concat([x, y], 1).reset_index()
    print(res) 
           date  mean  sum  sum_a  sum_b  max_a  max_b
    0  1/1/2016     2    8      2      6      1      4
    1  1/2/2016     1    2      1      1      1      1
    

    【讨论】:

    • unstacking,这是我缺少的部分,谢谢!!!!!!!这就是当你浏览 pandas 文档的四分之一时会发生的事情,我猜哈哈。
    猜你喜欢
    • 2019-08-10
    • 2016-05-24
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多