当前位置:首页>python>Python(Pandas 多条件自定义过滤+复合布尔索引优化)

Python(Pandas 多条件自定义过滤+复合布尔索引优化)

  • 2026-10-11 05:34:35
Python(Pandas 多条件自定义过滤+复合布尔索引优化)
业务数据筛选常遇到多条件混合筛选需求,常规多层条件写法可读性差,大量数据下循环过滤效率低下。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)
输出结果

线上数据处理规范

  1. 多个条件组合使用&、|、~,每个独立条件建议括号包裹规避优先级问题;
  2. 禁止使用for循环逐行判断筛选十万行以上数据;
  3. query()适合简单场景,复杂多条件、浮点运算场景优先布尔索引;
  4. 大规模数据筛选优先提前裁剪时间范围,减少内存加载量;
  5. 频繁复用的筛选条件可以封装函数,统一维护筛选规则。

最新文章

随机文章