You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按自定义分组合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:24:10