如何按自定义分组合并DataFrame行并求和,替换索引为组首元素
实现自定义分组求和并替换索引为分组首元素
针对你这种自定义非等值分组的需求,核心是先建立索引值到分组首元素的映射关系,再基于映射完成分组求和,具体实现步骤如下:
1. 构建索引映射字典
遍历你的自定义分组列表,把每个分组内的所有成员都映射到该分组的第一个元素,这是实现自定义分组的关键:
# 假设分组内元素为字符串类型(根据你的实际数据调整) grouping_list = [ ['A', 'B', 'C'], ['D', 'E', 'F'] ] # 生成映射字典:每个成员对应到分组的首个元素 group_mapping = {} for group in grouping_list: target_index = group[0] for member in group: group_mapping[member] = target_index
2. 基于映射完成分组求和
利用映射字典转换原DataFrame的索引,再按转换后的结果分组求和:
import pandas as pd # 你的原始DataFrame df = pd.DataFrame( {'count': [1, 3, 2, 4, 3, 5, 3]}, index=['B', 'C', 'A', 'A', 'D', 'F', 'E'] ) # 用映射字典生成分组键,然后分组求和 result_df = df.groupby(df.index.map(group_mapping))['count'].sum() # 重置索引并重命名(可选,根据你需要的最终格式调整) result_df = result_df.reset_index().rename(columns={'index': 'group_index'}).set_index('group_index') print(result_df)
运行后输出结果:
count group_index A 10 D 11
简化写法(适合小数据量场景)
如果数据量不大,也可以跳过映射字典,直接用lambda表达式在分组时查找对应分组的首元素,但这种写法在分组或数据量大时效率较低:
result_df = df.groupby( df.index.map(lambda x: next(g[0] for g in grouping_list if x in g)) )['count'].sum()
内容的提问来源于stack exchange,提问作者dfwgwefewfwe
相关产品推荐
相关产品推荐

