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

Python新手求助:如何通过过滤实现DataFrame基于emp#和sku的匹配

用Df2过滤Df1的几种高效方法(无多余列)

嘿,作为Python入门用户,这个需求其实挺常见的,我来给你分享两种不会产生多余列的过滤方式,完美替代有冗余的内连接操作~

方法一:元组集合+逐行匹配(适合中小型数据集)

我们可以把Df2里需要匹配的emp#和sku字段组合成元组的集合,然后检查Df1每行的这两个字段是否在这个集合里,就能精准过滤出符合条件的行:

# 先把Df2的emp#和sku转换成元组集合,方便快速查找
filter_pairs = set(zip(Df2['emp#'], Df2['sku']))

# 过滤Df1:只保留emp#和sku同时匹配的行
filtered_df1 = Df1[Df1.apply(lambda row: (row['emp#'], row['sku']) in filter_pairs, axis=1)]

这个方法逻辑很直观,就是逐行检查两个字段的组合是否存在于Df2的匹配对中,适合数据量不大的场景。

方法二:优化版内连接(大数据集首选)

其实你提到的内连接并不是一定会产生多余列——我们可以只拿Df2里的emp#和sku这两个关键列来做连接,这样连接后的结果就只有Df1的原始列,完全没有冗余:

# 只取Df2的匹配字段进行内连接,结果自动保留Df1的所有列
filtered_df1 = Df1.merge(Df2[['emp#', 'sku']], on=['emp#', 'sku'], how='inner')

这个方法的优势在于速度快,因为pandas的merge是矢量化操作,比逐行的apply效率高很多,尤其是当你的数据集有几万甚至几十万行的时候,这个方法的优势会特别明显。

如果还有疑问的话,可以试试用小样本数据跑一遍这两种方法,就能看到效果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:15:47