我有一个包含以下数据的数据框
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
答案 0 :(得分:1)
您需要分两步处理。第一步是仅mean
通过sum
来df.groupby
和date
。{/ 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列需要在date
和type
上进行分组,然后进行拆分。
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
现在,连接x
和y
。
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