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

提取df1独有行并保留专属列时遇KeyError问题求助

问题:提取df1中不存在于df2的行并解决KeyError

需求说明

  • 目标:找出DataFrame df1 中存在但 df2 中缺失的行,结果 df3 保留 df1 的全部列
  • 列信息:
    • df1:FIRSTOCCURRENCE_IPCORE、IDENTIFIER、Order_IPCORE
    • df2:FIRSTOCCURRENCE_IPCORE、IDENTIFIER_x、Order_IPCORE

原代码与报错

原代码尝试通过merge+indicator筛选,但抛出KeyError:

df3 = df1.loc[df1.merge(
    df2,
    left_on=[ 'FIRSTOCCURRENCE_IPCORE','IDENTIFIER', 'Order_IPCORE'],
    right_on=['FIRSTOCCURRENCE_IPCORE', 'IDENTIFIER_x', 'Order_IPCORE'],
    how='left',
    indicator=True
).query('_merge == "left_only"').index]

报错信息:

KeyError: [1699, 1700, 1703, 1709, 1710, 1711, 1714, 1715, 1716, 1720, 1721, 1722, 1723, 1726, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1747, 1748, 1749, 1750, 1752, 1753, 1755, 1757, 1758, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799] not in index

错误原因

merge操作后生成的新DataFrame会重新生成索引,这个索引和原始df1的索引不匹配。用merge结果的索引去取df1的行,自然会出现索引不存在的KeyError。

解决方案

方法1:直接从merge结果中筛选并保留df1列

不需要依赖索引匹配,直接从merge后的结果中筛选left_only的行,再提取df1的全部列:

# 执行左连接并添加_merge标识列
merged_df = df1.merge(
    df2,
    left_on=['FIRSTOCCURRENCE_IPCORE', 'IDENTIFIER', 'Order_IPCORE'],
    right_on=['FIRSTOCCURRENCE_IPCORE', 'IDENTIFIER_x', 'Order_IPCORE'],
    how='left',
    indicator=True
)
# 筛选仅在df1中存在的行,保留df1的列
df3 = merged_df[merged_df['_merge'] == 'left_only'][df1.columns]

方法2:利用索引集合匹配(更高效)

将两表的匹配列转为索引集合,通过isin判断行是否存在,适合大数据集:

# 将df2的匹配列转为MultiIndex集合
df2_index = df2.set_index(
    ['FIRSTOCCURRENCE_IPCORE', 'IDENTIFIER_x', 'Order_IPCORE']
).index
# 将df1的匹配列转为MultiIndex,筛选不在df2_index中的行
df3 = df1[
    ~df1.set_index(
        ['FIRSTOCCURRENCE_IPCORE', 'IDENTIFIER', 'Order_IPCORE']
    ).index.isin(df2_index)
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:39