在 pandas groupby 数据帧上应用条件聚合

Apply conditional aggregation on a pandas groupby dataframe

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

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

您需要分两步处理。第一步是仅通过对 datedf.groupby 调用获取 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] # 
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