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

如何对DataFrame中列标题相同的列按索引求和?

解决重复列名按组求和的问题

这事儿其实用pandas的groupby就能轻松搞定,完全不用操心不同列名的重复次数差异——不管某个列名出现1次、3次甚至压根没出现,都能自动处理。

核心解决方案

直接对列索引(也就是你的重复列名)做分组,指定axis=1(按列分组),然后调用sum()就行。给你写个完整的示例,完全贴合你的需求:

import pandas as pd
import numpy as np

# 先构造你提供的示例DataFrame
s = pd.Series([1,2,3,4,5], index=['6/7','6/8','6/9','6/10','6/11'])
t = pd.Series([2,4,6,8,10], index=['6/7','6/8','6/9','6/10','6/11'])
df = pd.DataFrame(np.c_[s,t,s*3,t*2.5], columns = ["M1","M2","M1","M2"])

# 关键操作:按列名分组求和
grouped_sum = df.groupby(df.columns, axis=1).sum()

# 给列名加上_sum后缀,匹配你想要的输出格式
grouped_sum.columns = [f"{col}_sum" for col in grouped_sum.columns]

print(grouped_sum)

运行这段代码后,输出就是你期望的结果:

M1_sum  M2_sum
6/7       4.0     7.0
6/8       9.0    12.0
6/9      12.0    15.0
6/10     12.0    18.0
6/11     25.0    50.0

为什么这个方法有效?

  • groupby(df.columns, axis=1):这里的axis=1是核心,告诉pandas我们要**按列的名称(列索引)**来分组,而不是默认的按行分组。pandas会自动把所有列名相同的列归为一组,不管它重复多少次。
  • .sum():对每个分组里的列,按行计算数值总和,正好实现你要的“同一行内同列名的列值相加”。
  • 最后重命名列名的步骤是可选的,但能让输出更符合你指定的M1_sum、M2_sum格式。

哪怕你的DataFrame有上千列、列名从M1到M340,这个方法也能高效处理,不需要手动统计每个列名的重复次数,pandas会自动完成所有工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:37:24