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

合并DataFrame后如何找回丢失的5条观测值(仅需名称)

找回合并过程中丢失的DataFrame行

嘿,这个问题很常见——丢失的那5条行肯定是因为它们的两列组合键在DataFrame One里找不到匹配项,默认的内连接(inner join)会把这些不匹配的行直接丢掉。别担心,有两种简单的方法能快速找回它们的名称:

方法1:利用merge的标识参数(直观易操作)

用merge的indicator=True参数可以帮你标记每一行的匹配状态,再筛选出仅存在于DataFrame Two的行:

# 以DataFrame Two为左表做左连接,添加匹配状态列
merged_df = df_two.merge(df_one, on=['key_col1', 'key_col2'], how='left', indicator=True)
# 筛选出仅在左表(df_two)存在的行
missing_rows = merged_df[merged_df['_merge'] == 'left_only']
# 提取你需要的名称列(把'name'换成你的实际列名)
missing_names = missing_rows['name'].tolist()

这个方法会生成一个_merge列,值为left_only的就是你要找的、在合并中被丢弃的行。

方法2:直接检查键的存在性(高效省内存)

如果你的DataFrame数据量很大,不想做完整合并,可以直接对比两表的组合键集合:

# 把DataFrame One的两列键转换成集合,方便快速查找
one_key_pairs = set(zip(df_one['key_col1'], df_one['key_col2']))
# 筛选DataFrame Two中键组合不在集合里的行
missing_rows = df_two[~df_two.apply(lambda row: (row['key_col1'], row['key_col2']) in one_key_pairs, axis=1)]
# 提取名称列
missing_names = missing_rows['name'].tolist()

额外提示

如果找出来的行里有键列是NaN的情况,那这就是原因——merge的时候NaN和任何值都无法匹配,会被自动排除。你可以单独检查一下这些行的键是否完整:

# 检查df_two中键列的缺失情况
df_two[df_two[['key_col1', 'key_col2']].isna().any(axis=1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:48:14