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

如何高效筛选DataFrame中place为空的行并实现多列条件校验?

Pandas 高效处理空值行的多列校验与统计

原始数据构建

先还原你的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'ID': [1,2,3,4],
    'place': [1, np.nan, np.nan, 1],
    'stock': [4,2,np.nan,1]
})

核心解决方案:矢量化布尔索引

完全不需要循环,用Pandas的矢量化操作就能高效完成筛选、校验和统计,且天然支持多列扩展:

1. 单条件校验(示例:place为空且stock>0)

# 构建筛选掩码:同时满足place为空、stock>0
mask = df['place'].isna() & (df['stock'] > 0)

# 统计符合条件的行数
valid_count = mask.sum()
# 查看具体符合条件的行
valid_rows = df[mask]

print(valid_count)  # 输出:1

2. 多列校验通用方案

如果需要同时校验10余列的条件,直接通过&(逻辑与)或|(逻辑或)组合多个条件即可;如果是批量列需要满足同一规则,可批量生成条件:

方式1:手动组合多列条件

假设新增quantity列,需要校验place为空 + stock>0 + quantity>1:

df['quantity'] = [1,3,np.nan,2]

mask_multi = df['place'].isna() & (df['stock'] > 0) & (df['quantity'] > 1)
count_multi = mask_multi.sum()
方式2:批量处理同规则列

如果有一批列(比如stock、quantity、sales)都需要满足>0,可以用all()/any()批量生成条件:

# 指定需要校验的列
check_cols = ['stock', 'quantity']
# 生成批量条件:所有指定列都>0
cols_condition = df[check_cols].gt(0).all(axis=1)
# 组合总条件:place为空 + 所有指定列符合规则
mask_batch = df['place'].isna() & cols_condition
count_batch = mask_batch.sum()

优势说明

  • 性能远优于循环:矢量化操作基于底层C实现,处理大数据集时速度比Python循环快10~100倍
  • 代码简洁易维护:多列扩展只需添加条件或修改校验列列表,无需修改循环逻辑
  • 可读性强:直接用布尔表达式表达业务规则,逻辑清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:23