比较 pandas DataFrame 中的两个日期列以验证第三列

Compare two date columns in pandas DataFrame to validate third column

背景资料
我正在研究一个 DataFrame,我已经使用 fuzzymatcher 成功地加入了两个不同的足球运动员数据集。这些数据集没有精确匹配的键,而是必须通过它们的名称来完成。来自两个数据库的名称列的匹配示例如下

long_name       name
L. Messi        Lionel Andrés Messi Cuccittini

作为 18,000 行数据库验证过程的一部分,我想检查合并后的 DataFrame 中的两个出生日期列 - df,确保列匹配如下例

dob             birth_date
1987-06-24      1987-06-24

两个日期列都已使用 pd.to_datetime() 从字符串转换为日期,例如

df['birth_date'] = pd.to_datetime(df['birth_date'])

我的问题
我的查询,我有另一个名为 'value' 的列。我想更新我的 pandas DataFrame,这样如果两个日期列匹配,条目就不会改变。但是,如果两个日期列不匹配,我希望将此值列中的数据更改为空。这是我可以在 Excel 中通过 date_diff 计算轻松完成的事情,但我不确定 pandas.

我当前的代码如下:

df.loc[(df['birth_date'] != df['dob']),'value'] = np.nan

这一步的原因(随意跳过)
使用此代码的原因是它会快速向我显示不准确的模糊匹配(大约占数据库总数的 10%)并允许我快速修复它们。

理想情况下,我还需要研究匹配算法以确保完美的日期匹配,但是,我当前的算法目前在当前状态下运行良好,并且项目即将完成。如果您对此有任何建议,我很乐意听到

非常感谢!

IICU: 请尝试 np.where。 工作原理如下;

np.where(if condition, assign x, else assign y)

if condition=df.loc[(df['birth_date'] != df['dob'], x=np.nan 和 y=盛行df.value

df['value']= np.where(df.loc[(df['birth_date'] != df['dob']),'value'], np.nan, df['value'])