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

如何遍历DataFrame多列并应用Lambda函数进行数据处理?

解决DataFrame多列批量应用lambda函数的问题

嘿,我懂你现在的卡点——要给50列(Column1到Column50)都执行一模一样的逻辑,但原来的循环写法里,lambda函数没法正确引用当前遍历的列,对吧?我先帮你分析下原代码的问题,再给你两个靠谱的解决方案:

原代码的核心问题

你写的循环里有两个关键问题:

  • lambda里的x.column是错误的:df.apply(axis=1)返回的x是行对象,x.column会被当成行的column属性,而不是你循环里的列变量,所以根本取不到目标列的值。
  • 条件表达式不完整:if后面没有对应的else分支,运行时会抛出语法错误,apply也无法处理缺失返回值的情况。

解决方案一:用向量化的np.where(强烈推荐)

如果你的数据量不小,向量化操作比逐行的apply效率高太多,50列的场景下差距会特别明显。用np.where可以直接对整列进行条件判断和赋值:

import numpy as np

# 先定义要处理的50列列表
target_columns = [f"Column{i}" for i in range(1, 51)]

for col in target_columns:
    # 逻辑:如果当前列的值 >= datacolumn3,就用datacolumn*datacolumn2替换,否则保留原列值
    df[col] = np.where(
        df[col] >= df["datacolumn3"],
        df["datacolumn"] * df["datacolumn2"],
        df[col]  # 这里可以改成你需要的默认值,比如0或者NaN
    )

解决方案二:用闭包修正apply写法(适合小数据量)

如果你一定要用apply,可以通过闭包传递列名的方式,让lambda能正确捕获当前循环的列变量,同时补全else分支:

target_columns = [f"Column{i}" for i in range(1, 51)]

for col in target_columns:
    df[col] = df.apply(
        lambda x, current_col=col: 
            x["datacolumn"] * x["datacolumn2"] if x[current_col] >= x["datacolumn3"] else x[current_col],
        axis=1
    )

这里的关键是给lambda加了current_col=col的默认参数,这样每个循环迭代时,lambda都会绑定当前的列名,不会出现变量引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:35:24