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

如何合并两个DataFrame,仅保留与df2匹配的df1全列数据行

解决方案

要实现保留df1中与df2每行完全匹配的行且保留df1全部列的需求,无需手动指定列,可通过以下方法快速实现:

方法一:使用pd.merge内连接(推荐)

利用merge的内连接特性,自动以df2的所有列作为匹配键,仅保留两边完全匹配的行,同时保留df1的全部列:

import pandas as pd

# 自动获取df2的所有列作为匹配键
match_columns = df2.columns.tolist()

# 执行内连接,仅保留匹配的行,保留df1全部列
df3 = pd.merge(df1, df2, on=match_columns, how='inner')

关键说明:

  • on=match_columns:自动将df2的所有列作为匹配依据,无需手动逐个列名,适配df1列数多的场景
  • how='inner':仅保留两边在匹配列上完全一致的行,符合需求
  • 结果会自动保留df1的所有列,不会丢失任何原始数据

处理潜在的匹配异常

如果出现明明应该匹配却未匹配的情况,大概率是字符串列存在空格或格式差异,可先清洗数据:

# 对匹配列中的字符串类型列去除首尾空格
for col in match_columns:
    if pd.api.types.is_string_dtype(df1[col]) and pd.api.types.is_string_dtype(df2[col]):
        df1[col] = df1[col].str.strip()
        df2[col] = df2[col].str.strip()

# 清洗后再执行merge
df3 = pd.merge(df1, df2, on=match_columns, how='inner')

验证结果

执行上述代码后,得到的df3将与你期望的结果完全一致,自动保留df1的全部列且仅包含与df2匹配的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:13:12