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

如何对比一个DataFrame的单列值与另一DataFrame并筛选匹配行

报错原因

x == df2['DATE']会返回和df2行数相同的布尔Series,每个元素对应df2该行的DATE是否等于x,if语句无法直接对Series做布尔判定,因此触发该错误。

注意:匹配前建议先统一两个表DATE列的格式,比如都转为datetime类型,避免因类型不一致导致匹配失败,转换代码参考:

import pandas as pd
df1['DATE'] = pd.to_datetime(df1['DATE'])
df2['DATE'] = pd.to_datetime(df2['DATE'])
解决方案

方法1:修改原有循环逻辑

只需调整if判断的条件,用any()方法判断是否存在匹配项即可,修改后的代码:

for index,row in df1.iterrows():
    x = row['DATE']
    if (df2['DATE'] == x).any():
        print('Found')
        new = df2[df2['DATE'] == x]
        print(new)
    else:
        print(f'{x} Not Found')

运行输出结果:

Found
   ID NAME        DATE
0   1  abc  2020-05-20
1   2  bcd  2020-05-20
2020-05-21 Not Found

方法2:向量化操作(推荐,性能更高)

不需要循环,直接用pandas自带的isin()方法一次性筛选所有匹配行,代码更简洁,大数据量下性能远高于循环写法:

# 筛选所有DATE在df1的DATE列中的df2行
matched_df = df2[df2['DATE'].isin(df1['DATE'])]
print(matched_df)

运行输出结果:

ID NAME        DATE
0   1  abc  2020-05-20
1   2  bcd  2020-05-20

如果需要单独标记df1每个日期是否匹配,可以补充如下代码:

df1['是否匹配'] = df1['DATE'].isin(df2['DATE'])
print(df1)

运行输出结果:

DATE  是否匹配
0 2020-05-20   True
1 2020-05-21  False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 23:36:05