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

如何在DataFrame的apply方法中使用接收3个参数的lambda函数?

解决Lambda函数应用于DataFrame多列时的参数缺失问题

错误原因

直接对df[['a','aa','aaa']]调用.apply()时,默认按列(axis=0)处理,每一次只会把单列数据传给lambda函数,但你的lambda需要3个位置参数,因此触发参数缺失错误。

解决方案

要实现按行提取三列数据传入lambda,需要指定axis=1让apply按行处理,有两种常用写法:

方法1:复用已定义的lambda函数

修改apply调用,按行处理并手动提取每行的三个列值传入funct:

import pandas as pd

# 你的原lambda函数
funct = (lambda a,aa,aaa: (a-aa)/aaa if aa>0 else a/aaa)

# 构造示例DataFrame
df = pd.DataFrame({'a': [200, 150], 'aa': [100, 0], 'aaa': [2, 3]})

# 按行应用,提取每行的三个列值传入funct
result = df.apply(lambda row: funct(row['a'], row['aa'], row['aaa']), axis=1)
print(result)

方法2:直接在apply中写逻辑(更简洁)

不需要单独定义funct,直接把逻辑写在apply的lambda里:

import pandas as pd

df = pd.DataFrame({'a': [200, 150], 'aa': [100, 0], 'aaa': [2, 3]})

result = df.apply(lambda row: (row['a']-row['aa'])/row['aaa'] if row['aa']>0 else row['a']/row['aaa'], axis=1)
print(result)

两种方法输出结果一致:

0    50.0
1    50.0
dtype: float64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:52:05