Pandas分组求和结果二次求和及新增second2列实现方法咨询
解决方案
先保存分组求和的结果,方便后续复用:
import numpy as np import pandas as pd df = pd.read_csv('test_python.csv') # 存储分组求和结果,避免重复计算 group_sum = df.groupby('fifth').sum()
需求1:对分组求和结果进行二次求和
根据实际需求,有两种常用实现方式:
- 按列单独二次求和(得到每列的总合计):
# 输出各列的最终求和结果,比如buy=6、cheese=8这种形式 col_total = group_sum.sum() print(col_total) - 整体二次求和(得到所有数值的总合计):
# 输出所有分组求和值的总和,比如6+8+12=26 total_sum = group_sum.sum().sum() print(total_sum)
需求2:基于原数据second列创建second2新列,填充分组求和结果
核心是将原数据每行所属fifth分组的求和结果,映射到新列中,以下是两种实现方式:
方法1:用transform直接生成(推荐,无需额外字典转换)
如果second2要填充该行所属分组的前三列总和:
# 计算每个fifth分组的前三列总和,自动匹配到原数据对应行 df['second2'] = df.groupby('fifth')[['buy', 'cheese', 'file']].transform('sum').sum(axis=1)
如果只需填充某一列的分组求和结果(比如仅buy列):
df['second2'] = df.groupby('fifth')['buy'].transform('sum')
方法2:用map关联分组结果字典
先把分组求和结果转为字典,再映射到原数据:
# 以buy列的分组求和为例,生成{fifth值: buy求和值}的字典 buy_sum_dict = group_sum['buy'].to_dict() # 将原数据fifth列对应的值映射为second2的内容 df['second2'] = df['fifth'].map(buy_sum_dict)
若要填充分组前三列的总和,先计算分组行总和再转字典:
group_row_sum = group_sum.sum(axis=1).to_dict() df['second2'] = df['fifth'].map(group_row_sum)
内容的提问来源于stack exchange,提问作者hyena
相关产品推荐
相关产品推荐

