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

Pandas中apply的Lambda函数与直接代码输出不一致原因咨询

问题原因与解决方法

错误根源

你在apply的lambda函数里犯了一个语法错误:x['date1'].date是引用Timestamp对象的date方法本身,而非调用该方法获取具体的日期值。

当你写x['date1'].date != x['date2'].date时,实际上是在比较两个方法对象的引用地址,这两个方法引用必然不相等,所以这个日期条件永远返回True。只要数值差绝对值大于0.5,整个判断条件就会成立,最终所有行都输出yes,完全不符合预期。

修正后的代码

把date改为date(),调用方法获取date对象后再比较:

df.apply(lambda x : 'yes' if (abs(x['value1'] - x['value2']) > .5) & (x['date1'].date() != x['date2'].date()) else 'no', axis = 1)

运行后会得到和直接向量化操作一致的结果:

0    no
1    no
2    yes
3    yes
4    no
dtype: object

额外建议

在Pandas中,直接使用向量化操作(你写的第二种方式)比apply+lambda的效率高得多,尤其是处理大数据集时。推荐优先使用向量化逻辑,再将布尔结果映射为'yes'/'no':

import numpy as np

df['flag'] = np.where(
    (abs(df['value1'] - df['value2']) > .5) & (df['date1'].dt.date != df['date2'].dt.date),
    'yes',
    'no'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 16:01:27