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

Pandas如何按列名条件用不同标量乘以DataFrame对应列值

代码错误说明

你写的测试代码有几个逻辑问题,导致结果不符合预期:

  • 循环完全失效:定义了for m in listm但全程没用到循环变量m,判断条件'Math' in listm永远为真,不管遍历到什么内容都会执行Math列乘5的操作
  • 没用到apply传入的参数:apply运行时会把遍历到的列/行传入自定义函数,但你写的函数没接收这个参数,反而直接全局调用df['Math'],根本没针对当前遍历的列做计算
  • 返回值逻辑错误:每次循环都会覆盖result变量,最终返回的永远是Math列乘5的整列数据,自然出不了正确结果
正确实现方案

新手友好写法(推荐)

不用硬啃apply的运行逻辑,直接逐列遍历处理就行,每一步逻辑都很直白,方便调试:

# 定义列和对应乘数的映射,后续要改系数直接改这里就行
coef_map = {
    "Math": 5,
    "Physique": 4,
    "Bio": 3
}

df2 = df.copy()  # 先复制原始数据,避免误改原df
for col in df2.columns:
    # 匹配对应乘数,不在映射里的列默认乘2
    current_coef = coef_map.get(col, 2)
    df2[col] = df2[col] * current_coef

apply写法

如果你想沿用apply的写法,要记住默认按列遍历,传入函数的是当前列对象,按列名判断即可:

def calc_column(col):
    if col.name == "Math":
        return col * 5
    elif col.name == "Physique":
        return col * 4
    elif col.name == "Bio":
        return col * 3
    else:
        return col * 2

df2 = df.apply(calc_column)

注意:不要在自定义的apply函数里直接引用全局的原始df,否则会出现你之前代码里的逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:54:17