我有一个像他这样的数据框
import pandas as pd
lst = [['A', '1','1', 25, 5], ['A', '1','0', 3,7],
['A', '0','1', 5, 9], ['A', '0','0', 5, 10],
['B', '1','1', 15, 18], ['B', '1','0', 2, 20],
['B', '0','1', 2, 60], ['B', '0','0', 55, 60]]
df1=pd.DataFrame(lst, columns =['id', 'groupby1', 'groupby2','sumfield1','sumfield2'], dtype = float)
df1
我如何将其聚合或将其转换为按ID聚合的形式,并在groupby1和groupby2中将子字段加1汇总-像这样的预期df
id sumfield1_gpby1_equal1 sumfield1_gpby2_equal1 sumfield2_gpby1_equal1 sumfield2_gpby2_equal1
A 28 30 12 14
B 17 17 38 78
通过将groupby1 == 1的第一行和第二行相加获得28
简单multiplication
,concat
并groupby.sum
能达到您的结果
df_gb1 = df1[['sumfield1', 'sumfield2']].mul(df1.groupby1, axis=0).add_suffix('_groupby1')
df_gb2 = df1[['sumfield1', 'sumfield2']].mul(df1.groupby2, axis=0).add_suffix('_groupby2')
df_sum = pd.concat([df_gb1, df_gb2], axis=1).groupby(df1.id).sum().reset_index()
Out[1574]:
id sumfield1_groupby1 sumfield2_groupby1 sumfield1_groupby2 \
0 A 28.0 12.0 30.0
1 B 17.0 38.0 17.0
sumfield2_groupby2
0 14.0
1 78.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句