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

不同长度Pandas DataFrame基于多列匹配查询ID差异的高性能方案咨询

高性能Pandas实现方案

直接使用Pandas内置的merge关联+过滤即可实现需求,完全避免嵌套循环,性能远高于Python层循环实现。

实现代码

import pandas as pd

# 1. 重命名ID列区分两个表的ID,避免重名冲突
df_g_rename = df_g.rename(columns={'ID': 'ID_g'})
df_n_rename = df_n.rename(columns={'ID': 'ID_n'})

# 2. 以NAME、TYPE、LEN为键做内连接,匹配三列完全相同的行
merged_df = pd.merge(df_n_rename, df_g_rename, on=['NAME', 'TYPE', 'LEN'], how='inner')

# 3. 过滤出两个ID不同的行,还原df_n的原始列结构
result = merged_df[merged_df['ID_n'] != merged_df['ID_g']][['NAME', 'ID_n', 'TYPE', 'LEN']].rename(columns={'ID_n': 'ID'}).reset_index(drop=True)

将你给出的示例数据代入以上代码,输出的result和你期望的结果完全一致。

性能说明

  • 完全基于Pandas底层C实现的矢量化运算,无Python层面的循环开销
  • 针对你提到的1000行、5000行的业务场景,运行耗时在毫秒级,远优于转字典、转数组的循环方案

可选优化

如果你的两个表中NAME+TYPE+LEN存在重复键,可以提前对df_g做去重处理,进一步提升效率:

# 提前对df_g的关联键去重,避免产生冗余笛卡尔积
df_g_unique = df_g_rename.drop_duplicates(subset=['NAME', 'TYPE', 'LEN'], keep='first')
merged_df = pd.merge(df_n_rename, df_g_unique, on=['NAME', 'TYPE', 'LEN'], how='inner')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:09:04