业务数据筛选常遇到多条件混合筛选需求,常规多层条件写法可读性差,大量数据下循环过滤效率低下。Pandas复合布尔索引向量化筛选可以替代for循环,同时支持动态组装筛选条件,解决复杂业务数据过滤性能问题。场景:交易流水筛选,筛选指定用户、金额区间、排除测试订单;对比逐行循环筛选与布尔索引性能差距,演示多条件组合、动态条件组装。核心知识点:布尔索引、向量化运算、isin多值匹配、~取反条件、query表达式性能陷阱。① 模拟交易流水数据代码
import pandas as pdimport numpy as nprng = np.random.default_rng(seed=66)df = pd.DataFrame({ "order_id": np.arange(1, 1001), "user_id": rng.integers(1000, 2000, size=1000), "amount": rng.uniform(10, 500, size=1000), "order_type": rng.choice(["normal", "test", "refund"], size=1000)})print("原始数据前10行:")print(df.head(10))
② 标准方案:复合布尔索引多条件筛选
# 筛选条件:金额50~400,排除测试订单cond1 = df["amount"] >= 50cond2 = df["amount"] <= 400cond3 = df["order_type"] != "test"filter_df = df[cond1 & cond2 & cond3]print("\n筛选后数据行数:", len(filter_df))
③ 拓展用法:多ID匹配+动态条件组装
target_users = [1024, 1156, 1389]cond_user = df["user_id"].isin(target_users)final_df = df[cond1 & cond2 & cond3 & cond_user]print("\n指定用户筛选结果:")print(final_df)
线上数据处理规范
- 多个条件组合使用
&、|、~,每个独立条件建议括号包裹规避优先级问题; - query()适合简单场景,复杂多条件、浮点运算场景优先布尔索引;
- 大规模数据筛选优先提前裁剪时间范围,减少内存加载量;
- 频繁复用的筛选条件可以封装函数,统一维护筛选规则。