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

Pandas按指定列分组聚合求和并保留原表列结构的实现方法

解决方案

基础场景实现

针对你给出的测试样例,直接按Area分组后对数值列求和即可,代码如下:

import pandas as pd

test = pd.DataFrame({'Area': ['Tipperary','Tipperary','Cork','Dublin'],
                     'Deaths': [11,33,44,55]}
)
# as_index=False 保证Area列还是普通列,不会变成索引,保留原表结构
result = test.groupby('Area', as_index=False).sum(numeric_only=True)

运行后得到的结果就是3行数据,其中Tipperary对应的Deaths值为两次数据之和44。

多列场景实现(保留原6列结构)

如果你的DataFrame共有6列,除了需要求和的数值列外还有其他非数值列,且同一个Area对应的非数值列取值唯一,可以通过自定义聚合规则实现需求,两种常用写法如下:

  • 手动指定每列聚合规则(适配列少、不同列聚合规则差异大的场景)
# 示例假设6列分别为Area、Province、Population、Deaths、Cases、Recovered
result = test.groupby('Area', as_index=False).agg(
    # 同Area唯一的非数值列取第一个值即可
    Province = ('Province', 'first'),
    # 所有数值列指定求和规则
    Population = ('Population', 'sum'),
    Deaths = ('Deaths', 'sum'),
    Cases = ('Cases', 'sum'),
    Recovered = ('Recovered', 'sum')
)
  • 批量生成聚合规则(适配列多、规则统一的场景,不需要手动逐个写列名)
agg_rules = {}
for col in test.columns:
    if col == 'Area':
        continue
    # 数值类型的列自动按求和处理
    if pd.api.types.is_numeric_dtype(test[col]):
        agg_rules[col] = 'sum'
    # 非数值类型的列自动取同分组第一个值
    else:
        agg_rules[col] = 'first'

result = test.groupby('Area', as_index=False).agg(**agg_rules)

注意:如果同一个Area对应的非数值列存在多个不同取值,可根据业务需要调整非数值列的聚合规则,比如使用lambda x: '|'.join(x.unique())拼接所有唯一值,避免数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:02