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

Pandas按条件保留行:多水果批量高效过滤(用列索引)

高效实现Pandas多条件行筛选(用列索引)

核心思路

不用逐个筛选再拼接,直接通过布尔条件组合+一次性切片完成筛选,大幅减少内存开销和运行时间,完全使用列索引避开列名依赖。

代码实现

1. 导入依赖

import pandas as pd
import numpy as np

2. 示例数据(可替换为你的数据集)

假设:

  • 列索引0 = 水果名称列
  • 列索引1 = amt1列
  • 列索引2 = amt2列
data = [
    ['苹果', 6, 3],
    ['苹果', 4, 2],
    ['香蕉', 2, 4],
    ['香蕉', 0, 3],
    ['橙子', 3, 2],
    ['橙子', 0, 1]
]
df = pd.DataFrame(data)

3. 定义多水果筛选条件

把每种水果的筛选规则写成布尔数组,存入列表:

conditions = [
    # 苹果:amt1≥5 且 amt2<5
    (df.iloc[:, 0] == '苹果') & (df.iloc[:, 1] >= 5) & (df.iloc[:, 2] < 5),
    # 香蕉:amt1≥1 且 amt2<5
    (df.iloc[:, 0] == '香蕉') & (df.iloc[:, 1] >= 1) & (df.iloc[:, 2] < 5),
    # 继续添加剩余8种水果的条件,格式完全一致
    (df.iloc[:, 0] == '橙子') & (df.iloc[:, 1] >= 2) & (df.iloc[:, 2] < 3)
]

4. 合并条件并筛选

用np.logical_or.reduce合并所有"或"条件,一次性提取符合要求的行:

# 合并所有条件(只要满足其中一个水果的规则就算符合)
mask = np.logical_or.reduce(conditions)
# 生成筛选后的数据集
filtered_df = df[mask]

为什么高效?

  • 避免了多次创建小DataFrame再concat的内存拷贝操作,大数据集下速度提升明显
  • 仅做一次数据切片,计算逻辑更简洁,底层Pandas的向量化运算会优化执行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:40:31