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

如何在Pandas中对重名列求和并保留指定分组列?

解决Pandas重复列名求和问题

你之前的代码报错是因为参数使用错误:groupby(cols, level=1, axis=1)中,axis=1表示按列分组,但cols是行维度的列名,并非列的分组依据;同时你的列名只有一级索引,level=1会导致索引越界。

正确实现步骤

无需复杂的行分组,只需针对重复列名的数值列按列名求和,同时保留非聚合列:

import pandas as pd

# 构建示例DataFrame
data = {
    'Server': ['server1']*5 + ['server2']*3,
    'Model': ['Cisco']*5 + ['IBM']*3,
    'Slot': [1,2,3,4,8,5,8,9],
    'Count40G': [10,5,20,0,0,10,5,0],
    'Count40G': [5,0,0,1,10,1,0,5]
}
df = pd.DataFrame(data)

# 1. 定义不需要聚合的列
non_agg_cols = ['Server', 'Model', 'Slot']
# 2. 提取需要聚合的数值列,按列名分组求和
aggregated_cols = df.drop(non_agg_cols, axis=1).groupby(level=0, axis=1).sum()
# 3. 合并非聚合列和聚合结果
result = pd.concat([df[non_agg_cols], aggregated_cols], axis=1)

print(result)

代码说明

  • df.drop(non_agg_cols, axis=1):剔除不需要聚合的列,仅保留需合并的重复数值列。
  • groupby(level=0, axis=1).sum():按列名(你的列索引仅一级,所以用level=0)分组,对每行的同列名数值求和。
  • pd.concat:将保留的非聚合列与求和后的数值列拼接,得到最终结果。

扩展场景适配

如果存在多个重复列名(比如Count40G、Count10G各重复多次),该方法依然适用,groupby(level=0, axis=1)会自动对所有同名列分别完成求和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:37:08