You need to enable JavaScript to run this app. Python Pandas:如何在DataFrame的lambda函数中访问多列?
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas:如何在DataFrame的lambda函数中访问多列?

Pandas 多列计算实现说明

你当前写法的问题

你尝试的df['value_b'].apply(lambda x: some_function(x, df['value_c'])) 是无法正常得到预期结果的:

  • 这段代码里apply是单独作用在value_b列上的,lambda拿到的x只是每一行对应的单个value_b数值
  • 传入函数的df['value_c']是整列的Series对象,不是当前行匹配的单个value_c值,既不符合自定义函数的参数要求,也无法完成逐行的匹配计算

可行的实现方案

Pandas完全支持在计算中同时访问多列数据,根据性能优先级有三类常用写法:

1. 整表逐行apply(最通用的写法)

把apply作用在整个DataFrame上,指定axis=1参数,就可以逐行拿到整行的数据,灵活取任意多列传入自定义函数:

df['value_d'] = df.apply(
    lambda row: some_function(row['value_b'], row['value_c']),
    axis=1  # 逐行遍历,设为0则是逐列遍历
)

这种写法没有列数限制,不管你的自定义函数需要2列还是多列的同行值,都可以通过row['列名']的方式自由取值。

2. 直接向量化传参(性能最优,优先推荐)

如果你的自定义函数支持逐元素运算(比如内部是加减乘除等基础逻辑,或者基于numpy实现的计算),完全不需要套apply,直接把整列作为参数传入即可,计算效率比逐行apply高几个数量级,尤其适合十万行以上的大表:

df['value_d'] = some_function(df['value_b'], df['value_c'])

如果自定义函数原本是为单值场景写的、不支持Series输入,可以用numpy.vectorize把函数包装成支持向量化输入的版本,同样能获得远高于逐行apply的性能:

import numpy as np
# 包装原生单值函数为向量化版本
vec_some_func = np.vectorize(some_function)
df['value_d'] = vec_some_func(df['value_b'].values, df['value_c'].values)

3. 单列apply取同行其他列(不推荐)

理论上你也可以在单列的apply回调里,通过行索引定位其他列的值,但这种写法逻辑冗余、性能差,遇到重复索引还会出逻辑错误,非必要不使用:

# 不推荐:每一行都要做一次索引查询,开销高、易出错
df['value_d'] = df['value_b'].apply(
    lambda x: some_function(x, df.loc[x.name, 'value_c'])
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 01:45:07