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

如何合并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)

关键说明

  1. 连接字段简化:因为两个表的连接字段都是LocID,直接用on='LocID'比分别指定left_on和right_on更简洁。
  2. 自定义后缀:使用suffixes参数可以让合并后的字段名更直观,避免混淆,比如LocName__from_madrid1明确来自Madrid1表。
  3. 正确的筛选逻辑:必须基于合并后的DataFrame进行字段对比,这样才能保证是同一LocID对应的两个LocName_值做比较。
  4. 默认后缀的用法:如果不需要自定义后缀,默认会生成LocName__x(左表Madrid1)和LocName__y(右表Madrid2),此时筛选代码为merged[merged['LocName__x'] != merged['LocName__y']]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:52:22