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

如何在Pandas中对DataFrame列做除法运算并保留原列名?

解决Pandas计算列保留原列名的问题

问题场景

现有如下DataFrame:

ID,WEIGHT,I1,I2,I4
1,0.2,839,1664,3266
2,0.1,851,863,858
3,0.4,1018,1999,3982
4,0.3,878,1724,3447

遍历I2、I4列(对应原代码中range(3,5)的索引),生成包含WEIGHT列与I_i/I1计算结果的新DataFrame,但原代码输出的计算列名变为0,需要保留原列名(如I2、I4)。


解决方案

原问题核心是计算后的Series未保留原列名,导致concat后列名被默认设为0,以下是几种简单修复方法:

方法1:给计算结果重命名原列名

计算比值后手动给Series指定原列名,再进行拼接:

import pandas as pd

# 读取或构造原DataFrame
df = pd.read_csv('你的数据文件路径.csv')

for i in range(3,5):
    col_name = df.columns[i]  # 获取当前列的原名称
    # 计算比值并绑定原列名
    ratio_col = (df.iloc[:,i] / df.iloc[:,2]).rename(col_name)
    # 拼接WEIGHT列和计算列
    df_new = pd.concat([df['WEIGHT'], ratio_col], axis=1)
    print(df_new)

方法2:直接构造新DataFrame(更直观)

不用concat,直接用字典构造新DataFrame,明确指定列名:

for i in range(3,5):
    col_name = df.columns[i]
    df_new = pd.DataFrame({
        'WEIGHT': df['WEIGHT'],
        col_name: df.iloc[:,i] / df.iloc[:,2]
    })
    print(df_new)

方法3:遍历列名而非索引(更易维护)

避免依赖列的索引位置,直接遍历目标列名,代码可读性更强:

# 指定需要处理的列
target_cols = ['I2', 'I4']
for col in target_cols:
    df_new = pd.DataFrame({
        'WEIGHT': df['WEIGHT'],
        col: df[col] / df['I1']
    })
    print(df_new)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:40:12