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
相关产品推荐
相关产品推荐

