如何合并Pandas DataFrame并筛选LocName_不同的条目?
问题描述
已基于LocID字段对两个结构一致(均包含LocID、LocName_字段)的表格执行内连接,需要筛选出两个表中LocName_字段值不同的条目列表。原代码的筛选逻辑错误,无法得到正确结果。
解决方法
你的核心问题是:合并后的DataFrame中,两个表的LocName_字段会被自动添加后缀(默认是_x和_y),直接用原表的LocName_列比较是无效的——原表的行顺序不一定对应,且合并后的数据是内连接后的匹配结果,必须基于合并后的表做字段对比。
修正后的代码
import pandas as pd # 读取两个CSV文件 Madrid1 = pd.read_csv('Madrid1.csv') Madrid2 = pd.read_csv('Madrid2.csv') # 执行内连接,连接字段为LocID,自定义后缀区分两个表的同名字段 merged = pd.merge( Madrid1, Madrid2, how='inner', on='LocID', suffixes=('_from_madrid1', '_from_madrid2') ) # 筛选出LocName_值不相等的条目 filtered_result = merged[merged['LocName__from_madrid1'] != merged['LocName__from_madrid2']] # 可选:只保留需要的字段(LocID和两个名称字段) final_result = filtered_result[['LocID', 'LocName__from_madrid1', 'LocName__from_madrid2']] print(final_result)
关键说明
- 连接字段简化:因为两个表的连接字段都是
LocID,直接用on='LocID'比分别指定left_on和right_on更简洁。 - 自定义后缀:使用
suffixes参数可以让合并后的字段名更直观,避免混淆,比如LocName__from_madrid1明确来自Madrid1表。 - 正确的筛选逻辑:必须基于合并后的DataFrame进行字段对比,这样才能保证是同一
LocID对应的两个LocName_值做比较。 - 默认后缀的用法:如果不需要自定义后缀,默认会生成
LocName__x(左表Madrid1)和LocName__y(右表Madrid2),此时筛选代码为merged[merged['LocName__x'] != merged['LocName__y']]。
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

