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

如何在Python Pandas中合并指定无共同值的行并求和?

解决Pandas合并指定无共同值行并求和的问题

嘿,这个问题其实很好解决!既然groupby()需要一个分组依据才能合并行,那我们可以手动给要合并的行分配相同的分组标签,让groupby()把它们归为一组进行求和。我给你用示例代码一步步演示:

步骤1:构造示例数据集

先模拟你提到的场景,假设我们有如下DataFrame(注意Pandas默认是0索引,所以你说的第3、4行对应索引2、3,第6、7行对应索引5、6):

import pandas as pd

# 构造示例数据
data = {
    '类别': ['甲', '乙', '丙', '丁', '戊', '己', '庚'],
    '数值1': [10, 20, 30, 40, 50, 60, 70],
    '数值2': [100, 200, 300, 400, 500, 600, 700]
}
df = pd.DataFrame(data)

步骤2:创建分组标识

给需要合并的行分配同一个分组ID,其他行用唯一标识避免被合并:

# 生成分组键:指定索引的行归为同一组,其余行单独成组
group_keys = []
for idx in df.index:
    if idx in [2, 3]:  # 对应你说的第3、4行
        group_keys.append('合并组1')
    elif idx in [5, 6]:  # 对应你说的第6、7行
        group_keys.append('合并组2')
    else:
        group_keys.append(f'单独行_{idx}')  # 其他行保持独立

# 把分组键加入DataFrame
df['分组标识'] = group_keys

如果你想更简洁,也可以用numpy.where来生成分组键:

import numpy as np

group_keys = np.where(df.index.isin([2,3]), '合并组1',
                      np.where(df.index.isin([5,6]), '合并组2',
                               df.index.astype(str)))
df['分组标识'] = group_keys

步骤3:分组求和并整理结果

用groupby()按分组标识聚合,数值列求和,非数值列可以根据需求选择保留第一个值或拼接:

# 自定义聚合规则:数值列求和,类别列取第一个值
result_df = df.groupby('分组标识').agg({
    '类别': 'first',  # 如果需要合并类别字符串,可以用', '.join
    '数值1': 'sum',
    '数值2': 'sum'
}).reset_index(drop=True)

print(result_df)

运行后你会得到合并后的结果:第3、4行的数值被求和,第6、7行同理,其他行保持原样。

核心思路总结

groupby()的本质是根据“分组依据”聚合行,当行没有共同值时,我们手动给它们添加相同的分组依据,就能让groupby()识别并合并这些行啦!

内容的提问来源于stack exchange,提问作者Indika Rajapaksha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:07:52