在 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
您需要分两步处理。第一步是仅通过对 date
的 df.groupby
调用获取 mean
和 sum
。
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] #
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
我有一个包含以下数据的数据框
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
您需要分两步处理。第一步是仅通过对 date
的 df.groupby
调用获取 mean
和 sum
。
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] #
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