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

如何在Pandas中按EntityID匹配排序拼接不匹配DataFrame并替换NaN

Pandas实现不匹配记录对齐展示与NaN替换

问题分析

原代码通过concat+drop_duplicates筛选不匹配记录,会导致同EntityID的差异记录被拆分为独立行,无法对齐展示。我们改用**外连接(Outer Join)**结合自定义条件筛选,实现EntityID对齐、NaN替换与排序的需求。

解决方案代码

import pandas as pd

# 原始数据
raw = pd.DataFrame({'EntityID': ['Appple', 'Mango','Grapes' ,'Banana'],
                    'Date': [10, 20, 30,55], 'Val': [10, 30, 15,89]})

bob = pd.DataFrame({'EntityID': ['Appple','Dongo' ,'Banana', 'Mango','Rea','Hpo','Pauy'],
                    'Date': [10, 20, 30,5,9,8,98], 'Val': [100, 200, 15,21,33,44,44]})

# 1. 外连接所有记录,标记来源并区分字段
full_merge = raw.merge(bob, on='EntityID', how='outer', suffixes=('_raw', '_bob'), indicator=True)

# 2. 定义不匹配条件:只在单表中,或EntityID相同但字段值不同
mismatch_condition = (
    (full_merge['_merge'] != 'both') |
    (full_merge['Date_raw'] != full_merge['Date_bob']) |
    (full_merge['Val_raw'] != full_merge['Val_bob'])
)
mismatch = full_merge[mismatch_condition]

# 3. 整理为EntityID对齐的结构,替换NaN并排序
fill_text = "No record found for this entity ID"
result = (
    mismatch.set_index('EntityID')[['Date_raw', 'Val_raw', 'Date_bob', 'Val_bob']]
    .fillna(fill_text)
    .sort_index()
)

print(result)

代码说明

  1. 外连接与标记:通过how='outer'保留所有EntityID,suffixes区分两个表的字段,indicator=True生成_merge列标记记录来源(left_only/right_only/both)。
  2. 筛选不匹配记录:自定义条件覆盖三种不匹配场景:仅存在于raw、仅存在于bob、EntityID相同但字段值不同。
  3. 对齐与替换:将EntityID设为索引实现对齐,用fillna替换缺失值为指定文本,最后按EntityID排序保证条目有序。

输出示例

Date_raw               Val_raw Date_bob               Val_bob
EntityID                                                                    
Appple               10                    10       10                    100
Banana               55                    89       30                     15
Dongo     No record... No record...       20                    200
Grapes               30                    15 No record... No record...
Hpo       No record... No record...        8                     44
Mango                20                    30        5                     21
Pauy      No record... No record...       98                     44
Rea       No record... No record...        9                     33

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:42:19