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

时间:2017-08-25 09:02:08

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

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

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

1 个答案:

答案 0 :(得分:1)

您需要分两步处理。第一步是仅mean通过sumdf.groupbydate。{/ p>

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