如何在Pandas DataFrame中不遍历行统计满足条件的行数?
问题描述
我有如下Pandas DataFrame:
data = { 'number':['one','two','three'], 'l_min_x':[6,6,6], 'l_max_x':[12,18,15], 'r_min_x':[6,6,6], 'r_max_x':[17,19,15]} datadf= pd.DataFrame(data) print(datadf)
输出结果为:
number l_min_x l_max_x r_min_x r_max_x 0 one 6 12 6 17 1 two 6 18 6 19 2 three 6 15 6 15
需要完成两个统计需求,且希望避免逐行遍历:
- 统计
l_min_x小于7且l_max_x大于17的行数,本例结果为1 - 统计
r_min_x小于8且r_max_x大于16的行数,本例结果为2
解决方案
完全不需要逐行遍历,利用Pandas的向量化布尔索引结合sum()方法就能高效完成统计,这也是Pandas推荐的高效处理方式:
1. 第一个统计需求
count1 = ((datadf['l_min_x'] < 7) & (datadf['l_max_x'] > 17)).sum() print(count1) # 输出:1
2. 第二个统计需求
count2 = ((datadf['r_min_x'] < 8) & (datadf['r_max_x'] > 16)).sum() print(count2) # 输出:2
原理说明
- 单个条件如
datadf['l_min_x'] < 7会生成一个布尔类型的Series,每个元素对应该行是否满足该条件 - 使用
&连接多个布尔条件时,必须用括号包裹每个条件,避免运算符优先级导致的错误 - 布尔值在求和时会被自动转换为整数(
True为1,False为0),sum()的结果就是符合条件的总行数
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

