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
相关产品推荐
相关产品推荐

