如何基于两个分类列对DataFrame的数值列进行条件累积求和?
按多分类列分组计算累积求和
需求:基于DataFrame的两个分类列(A、E),对数值列D执行分组累积求和,按A与E的组合(如A0E0、A0E1等)分别计算D列的累积和,生成示例中的F列。
给定数据
import pandas as pd dict1 = {'A': {0: 'A0', 1: 'A0', 2: 'A0', 3: 'A0', 4: 'A1', 5: 'A1', 6: 'A1', 7: 'A1', 8: 'A1', 9: 'A1'}, 'B': {0: 'B0', 1: 'B1', 2: 'B2', 3: 'B3', 4: 'B4', 5: 'B5', 6: 'B6', 7: 'B7', 8: 'B8', 9: 'B9'}, 'C': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}, 'D': {0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}, 'E': {0: 'E0', 1: 'E1', 2: 'E0', 3: 'E1', 4: 'E0', 5: 'E1', 6: 'E0', 7: 'E1', 8: 'E0', 9: 'E1'}} df2 = pd.DataFrame(dict1)
解决方案
使用pandas的groupby结合cumsum方法,按A、E两列分组后对D列计算累积求和:
df2['F'] = df2.groupby(['A', 'E'])['D'].cumsum()
说明
groupby(['A', 'E']):将DataFrame按A和E的唯一组合分组,每个分组对应一组A-E的配对(如A0+E0、A0+E1等)['D'].cumsum():对每个分组内的D列执行累积求和操作- 最终将结果赋值给新列F,即可得到需求中的效果
运行结果
A B C D E F 0 A0 B0 0 10 E0 10 1 A0 B1 1 11 E1 11 2 A0 B2 2 12 E0 22 3 A0 B3 3 13 E1 24 4 A1 B4 4 14 E0 14 5 A1 B5 5 15 E1 15 6 A1 B6 6 16 E0 30 7 A1 B7 7 17 E1 32 8 A1 B8 8 18 E0 48 9 A1 B9 9 19 E1 51
内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar
相关产品推荐
相关产品推荐

