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

如何基于多列组合筛选Pandas DataFrame?

基于多列组合条件高效筛选Pandas DataFrame

当你需要从包含大量列、数千行的Pandas DataFrame中,根据数千条多列组合条件筛选行时,优先选择向量化操作保证效率,避免逐行循环的低效方案。以下是两种实用且高效的实现方式:

示例数据与条件

先定义示例DataFrame和筛选条件:

import pandas as pd

data = {'product_name': ['laptop', 'laptop', 'printer', 'tablet', 'desk', 'chair', 'chair', 'chair'],
        'price': [1200, 1000, 150, 300, 450, 200, 100, 120],
        'color': ['white', 'black', 'white', 'black', 'brown', 'red', 'grey', 'black']
        }
df = pd.DataFrame(data)

# 多列组合条件列表
conditions = [('laptop', 'black'), ('chair', 'red'), ('chair', 'grey')]

方法1:使用pd.merge(大数据量首选)

将条件列表转换为小型DataFrame,通过内连接(inner join)快速匹配原DataFrame的行,这种方式利用Pandas优化的向量化操作,在数据量较大时性能最优。

# 将条件转为DataFrame,列名需与原DataFrame对应列一致
cond_df = pd.DataFrame(conditions, columns=['product_name', 'color'])

# 内连接筛选匹配行
result = pd.merge(df, cond_df, on=['product_name', 'color'], how='inner')
print(result)

输出结果:

product_name  price  color
0        laptop   1000  black
1         chair    200    red
2         chair    100   grey

方法2:使用isin配合列组合元组

如果代码简洁性优先,可将需要匹配的列组合成元组,再用isin判断是否在条件列表中。注意:数据量极大时,该方法性能略逊于merge。

# 将指定列组合成元组序列
combined_cols = df[['product_name', 'color']].apply(tuple, axis=1)

# 筛选匹配条件的行
result = df[combined_cols.isin(conditions)]
print(result)

注意事项

  • 若需扩展到更多列的组合条件,只需调整条件元组的长度,并同步修改merge的on参数或apply选取的列即可
  • 使用merge时,务必保证条件DataFrame的列名与原DataFrame完全一致,否则会导致匹配失败
  • 两种方法都会保留原DataFrame中的重复行,与原数据的重复逻辑一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:12