如何在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
相关产品推荐
相关产品推荐

