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

如何对比两个DataFrame,仅在指定列变化时更新日期列

解决DataFrame条件更新时保留原日期的问题

你的问题出在np.where的参数逻辑和赋值错误:

  1. 原代码条件写反:需要在C列存在差异时更新日期,判断条件应为df1['C'] != df2['C']
  2. 无差异行的赋值不应是0,而是保留df2原本的D列值df2['D']

下面提供两种正确实现方式:

方法一:修正np.where的用法

import pandas as pd
import numpy as np
from datetime import date

df1 = pd.DataFrame({"A": ['Apple','Strawberry','Cherry'],"C":['green','red','red'],"D":['2022-08-01','2022-08-01','2022-08-01']})
df2 = pd.DataFrame({"A": ['Apple','Strawberry','Cherry'],"C":['red','red','red'],"D":['2022-08-01','2022-08-01','2022-08-01']})

# 转换当日日期为字符串,和原D列格式统一
today_str = date.today().strftime('%Y-%m-%d')
# 条件:C列不同时替换为当日日期,否则保留原日期
df2['D'] = np.where(df1['C'] != df2['C'], today_str, df2['D'])

print(df2)

方法二:使用pandas.loc精准更新(推荐)

这种方式仅修改需要更新的行,避免全列赋值,逻辑更直观:

import pandas as pd
from datetime import date

df1 = pd.DataFrame({"A": ['Apple','Strawberry','Cherry'],"C":['green','red','red'],"D":['2022-08-01','2022-08-01','2022-08-01']})
df2 = pd.DataFrame({"A": ['Apple','Strawberry','Cherry'],"C":['red','red','red'],"D":['2022-08-01','2022-08-01','2022-08-01']})

today_str = date.today().strftime('%Y-%m-%d')
# 生成差异行的掩码
mask = df1['C'] != df2['C']
# 仅更新掩码为True的行的D列
df2.loc[mask, 'D'] = today_str

print(df2)

两种方法运行后,df2的结果都会符合预期:

A      C           D
0       Apple    red  202X-XX-XX  # 当日日期
1  Strawberry    red  2022-08-01
2       Cherry    red  2022-08-01

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:40:20