如何在Pandas DataFrame中对指定列求和并生成新列?
解决Pandas中添加C和E列求和的Total列问题
嘿,我来帮你搞定这个Pandas的问题!先看看你的代码哪里出了问题,再给你几个简洁靠谱的解决方案。
你的代码为啥跑不起来?
有几个关键错误:
- 语法错误:
df[iloc.:,[2,4]]是完全错误的写法!iloc是DataFrame的内置属性,必须通过df.iloc调用,而且行和列的索引要用逗号分隔,正确写法是df.iloc[:, [2,4]]。 - 冗余操作:
sum(axis=1)已经直接返回了每行C、E列的和(是一个Series),你没必要转成numpy数组再用列表推导式去取row[0]——而且一维数组里的每个元素都是单个数值,根本没有row[0]这个索引,这会直接报错。 - 目标偏离:你想要的是给原DataFrame添加新列,结果却把存在列表
df2里,方向完全错啦。
正确的实现方式
下面两种方法都符合你"避免循环、优先向量化操作"的需求,而且简洁高效:
方法1:直接用列名相加(最直观)
既然你明确知道要相加的列是C和E,直接列名相加是最简洁的写法:
import pandas as pd data = [{'Title': 'Size', 'B': 20, 'C':30, 'D':15, 'E':15}, {'Title': 'Length', 'B': 50,'C':60, 'D':14,'E':15}, {'Title': 'Area', 'B': 4,'C':3, 'D':13,'E':15}] df = pd.DataFrame(data) # 直接给新列Total赋值C和E的和 df['Total'] = df['C'] + df['E'] print(df)
运行后输出:
Title B C D E Total 0 Size 20 30 15 15 45 1 Length 50 60 14 15 75 2 Area 4 3 13 15 18
方法2:用iloc按列位置求和(适合列名不固定的场景)
如果你的列位置固定(比如C是第2列、E是第4列),可以用iloc来选择列后求和:
# 选择第2列(索引从0开始)和第4列,按行求和 df['Total'] = df.iloc[:, [2, 4]].sum(axis=1)
这里axis=1表示按行方向计算求和,结果直接赋值给新列即可,完全不需要循环或者列表推导。
内容的提问来源于stack exchange,提问作者AATU
相关产品推荐
相关产品推荐

