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

如何用Pandas找出2020数据集有但2021没有的指定行?

解决方法

你的问题出在最后一步的筛选逻辑错误,应该利用外连接后生成的_merge列来精准筛选仅存在于2020数据集的行,而不是用isin判断。

修正后的代码(基于merge方法)

value = 'EXAMPLE'
filtered_df1 = df_2020[df_2020['column'].str.contains(value, na=False)]
filtered_df2 = df_2021[df_2021['column'].str.contains(value, na=False)]
# 执行外连接并添加来源标记列
merged_df = filtered_df1.merge(filtered_df2, on='column', how='outer', indicator=True)
# 筛选仅存在于2020筛选数据中的行
missing_rows = merged_df[merged_df['_merge'] == 'left_only']
# 可选:删除不需要的_merge列
missing_rows = missing_rows.drop(columns='_merge')

更简洁的替代方法(无需merge)

直接在2020的筛选数据中,排除那些在2021筛选数据里存在的行:

value = 'EXAMPLE'
filtered_df1 = df_2020[df_2020['column'].str.contains(value, na=False)]
filtered_df2 = df_2021[df_2021['column'].str.contains(value, na=False)]
missing_rows = filtered_df1[~filtered_df1['column'].isin(filtered_df2['column'])]

错误原因说明

你原来的代码中,merged_df是外连接后的结果,包含了两个数据集的所有column值。用~merged_df['column'].isin(filtered_df2['column'])筛选时,本质是找所有不在2021筛选数据里的column值,但外连接后的结果里这些值已经和2021的空值合并,且这种方式无法精准对应到原2020数据的完整行(如果原数据有其他列的话)。而利用_merge列的left_only标记,能直接定位到仅存在于左表(2020筛选数据)的完整行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:25:22