Pandas DataFrame按行实现多列与指定列相乘后求和的问题
Pandas计算Sum_Price的问题解析
问题原因
你用df.iloc[:,2:4]*df.iloc[:,5]出现额外列的原因有两个:
- 列范围选取错误:
iloc[:,2:4]是左闭右开的索引规则,只包含第2、3列(对应Col1、Col2),漏掉了需要参与计算的Col3(第4列)。 - 广播机制生成多列:当多列DataFrame和单列Series相乘时,Pandas会触发广播逻辑,让单列与每一列分别相乘,最终生成和原多列数量一致的结果列(即Col1Price、Col2Price这两列),而非直接求和后的单列,所以会出现“额外列”。
正确实现方式
方法一:用iloc索引实现
先选取正确的列范围(Col1、Col2、Col3对应索引2到5,左闭右开),乘以Price列后按行求和:
# 计算每行Col1*Price + Col2*Price + Col3*Price的结果 df['Calculated_Sum_Price'] = df.iloc[:,2:5].mul(df.iloc[:,5], axis=0).sum(axis=1)
方法二:直接用列名实现(更直观)
如果列名固定,直接通过列名计算可读性更强:
# 先求和系数再乘Price,等价于分别相乘后累加 df['Calculated_Sum_Price'] = (df['Col1'] + df['Col2'] + df['Col3']) * df['Price'] # 或者分开计算后累加 df['Calculated_Sum_Price'] = df['Col1']*df['Price'] + df['Col2']*df['Price'] + df['Col3']*df['Price']
两种方法都能得到和原Sum_Price列完全一致的结果。
内容的提问来源于stack exchange,提问作者FlyingPickle
相关产品推荐
相关产品推荐

