如何合并两个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
相关产品推荐
相关产品推荐

