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

如何通过PRODUCT_ID与COUNTRY_CODE元组列表过滤Pandas DataFrame

问题描述

我有一个格式为(PRODUCT_ID, COUNTRY_CODE)的元组列表:

[(1111, 'CO'),
 (2222, 'CO'),
 (1111, 'BR')]

同时有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
'COUNTRY_CODE': ['CO','CO','CO','BR','BR','BR','CO'], 
'VERTICAL_GROUP_ID': [2,2,3,2,3,3,3], 
'SUB_VERTICAL': ['SUPER','SUPER','HOME','LICOR','SPORTS','HOME','TECH'], 
'PRODUCT_ID': [1111,3333,1111,4444,1111,2222,2222], 
'SHOWN': [7,8,12,14,16,1,13], 
})

请问如何根据元组列表中的PRODUCT_ID和COUNTRY_CODE值过滤该DataFrame,得到如下结果?

COUNTRY_CODEVERTICAL_GROUP_IDSUB_VERTICALPRODUCT_IDSHOWN
CO2SUPER11117
CO3HOME111112
BR3SPORTS111116
CO3TECH222213
解决方案

方法一:使用apply+isin

将DataFrame中PRODUCT_ID和COUNTRY_CODE列逐行转为元组,再匹配目标元组列表进行过滤:

# 定义目标元组列表
target_tuples = [(1111, 'CO'), (2222, 'CO'), (1111, 'BR')]

# 生成匹配布尔序列并过滤
filtered_df = df[df[['PRODUCT_ID', 'COUNTRY_CODE']].apply(tuple, axis=1).isin(target_tuples)]

方法二:使用merge(大数据量更高效)

把目标元组转为临时DataFrame,通过合并操作实现过滤:

# 将目标元组转为DataFrame
target_df = pd.DataFrame(target_tuples, columns=['PRODUCT_ID', 'COUNTRY_CODE'])

# 合并过滤
filtered_df = df.merge(target_df, on=['PRODUCT_ID', 'COUNTRY_CODE'])

两种方法最终都会得到你需要的结果,方法二更适合处理大规模数据集,因为merge是向量化操作,效率优于逐行处理的apply。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:20:38