Pandas DataFrame如何基于多列值组合列表实现无循环行筛选
Pandas多列指定组合无循环筛选方案
以下两种实现方式完全基于pandas原生向量化操作,无显式循环,可直接适配你给出的元组列表格式的筛选规则:
方法1:索引匹配法(性能最优,推荐)
将需要匹配的两列转为多级索引,调用isin方法直接匹配目标组合:
import pandas as pd # 原始DataFrame df = pd.DataFrame({ 'C1': ['A','A','A','B', 'B', 'C', 'C'], 'C2': [1, 2, 3, 1, 2, 1, 2], 'C3': [2., 3.1, 1.2, 1.4, 2.1, .4, .5] }) # 筛选组合 filter_pairs = [('A', 2), ('B', 1)] # 筛选逻辑 result = df[df.set_index(['C1', 'C2']).index.isin(filter_pairs)].reset_index(drop=True)
运行后result输出完全符合预期:
C1 C2 C3 0 A 2 3.1 1 B 1 1.4
方法2:内连接法(逻辑直观,易扩展)
将筛选组合转为DataFrame,通过内连接匹配符合条件的行:
filter_df = pd.DataFrame(filter_pairs, columns=['C1', 'C2']) result = pd.merge(df, filter_df, on=['C1', 'C2'], how='inner')
该方法适合筛选规则需要附带额外匹配条件的场景,扩展成本很低。
两种方法均不需要自行编写循环逻辑,数据量越大性能优势越明显。
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

