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

基于NULL值的数据集合并:按Unique_id/Website匹配的实现求助

按条件切换连接键的左连接实现

数据集示例

第一个数据集(df_1)

Unique_id   Name    Website      Avg                  
2323aa777  Medigen  medigen.org  32                            
NaN        Aster    astera.gm    31                
4373cc987  Smenda   NaN          32                

第二个数据集(df_2)

Unique_id    Website      Rev
3232hh322    smenda.gm    433433
54542ff23    dretbey.gm   542322
8367ff233    brtetu.gm    343433

需求

左连接两个数据集,规则:

  • 当df_1的Unique_id不为空时,以Unique_id作为连接键
  • 当df_1的Unique_id为空时,以Website作为连接键

尝试的错误代码

df_merged = np.where(df_1['Unique_id'].isnull(),df_1.merge(df_2,how='left',on='website',df_1.merge(df_2,how='left',on='unique_id')

正确实现方法

步骤说明

  1. 统一列名大小写(避免因键名大小写不一致导致匹配失败)
  2. 将df_1拆分为两个子集:Unique_id非空的部分、Unique_id为空的部分
  3. 分别对两个子集执行左连接:
    • 非空子集用Unique_id连接df_2
    • 空子集用Website连接df_2
  4. 合并两个连接结果,可选择恢复原数据顺序

代码实现

import pandas as pd
import numpy as np

# 假设已加载好两个数据集df_1和df_2
# 统一列名为小写,消除大小写差异
df_1.columns = df_1.columns.str.lower()
df_2.columns = df_2.columns.str.lower()

# 拆分数据集
mask = df_1['unique_id'].notna()
df_non_null_uid = df_1[mask]
df_null_uid = df_1[~mask]

# 分别执行左连接
merged_non_null = df_non_null_uid.merge(df_2, how='left', on='unique_id')
merged_null = df_null_uid.merge(df_2, how='left', on='website')

# 合并结果并恢复原顺序(不需要顺序可省略sort_index)
df_merged = pd.concat([merged_non_null, merged_null]).sort_index()

补充说明

  • 原代码的问题在于np.where无法直接拼接DataFrame对象,拆分后分别连接是更合理的逻辑
  • 第一个数据集中Smenda的Website为NaN,这部分连接后Rev会保持NaN,符合左连接规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 07:10:22