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

在Pandas中使用Lambda比较datetime64[ns]列未生效的问题

问题分析与解决

你的代码逻辑条件写反了,导致不符合需求的场景下也修改了Dt-1的值。

问题根源

你需求是:当Dt-1的datetime值大于Dt-2时,将Dt-1替换为Dt-2,但你的lambda表达式逻辑完全相反:

  • 当前代码是:如果Dt-1 > Dt-2,保留Dt-1;否则替换为Dt-2
  • 这和你要实现的需求刚好颠倒,所以才会出现不符合条件时Dt-1被修改的情况。

修正后的代码

import pandas as pd

df = pd.DataFrame([["a", "2022-11-01 00:01:11", "2022-11-02 00:02:33"]
                   ],
                  columns=["gr", "Dt-1", "Dt-2"])

df["Dt-1"] = pd.to_datetime(df["Dt-1"])
df["Dt-2"] = pd.to_datetime(df["Dt-2"])

print("修改前:")
print(df)
print(df.info())

# 修正逻辑:当Dt-1 > Dt-2时替换为Dt-2,否则保留原Dt-1
df["Dt-1"] = df.apply(lambda x: x["Dt-2"] if x["Dt-1"] > x["Dt-2"] else x["Dt-1"], axis=1)

print("\n修改后:")
print(df)
print(df.info())

更高效的实现方式(推荐)

apply在大数据集上效率较低,推荐使用pandas原生向量化操作,性能更优:

方法1:使用np.where

import numpy as np
df["Dt-1"] = np.where(df["Dt-1"] > df["Dt-2"], df["Dt-2"], df["Dt-1"])

方法2:使用df.loc

df.loc[df["Dt-1"] > df["Dt-2"], "Dt-1"] = df["Dt-2"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:45:29