如何用Pandas统计不同区间内的行数及Buy列1的数量?
高效实现Pandas区间统计方案
核心思路
使用pd.cut()对Est列进行区间划分,再通过groupby()结合agg()一次性完成分组统计,相比手动筛选的方式更简洁高效,代码可读性也更强。
完整实现代码
import pandas as pd df = pd.DataFrame({ 'Est': [1.18,1.83,2.08,2.30,2.45,3.21,3.26,3.54,3.87,4.58,4.59,4.98], 'Buy': [0,1,1,1,0,1,1,0,1,0,0,1] }) # 定义目标区间边界 bins = [1, 2, 3, 4, 5] # 分组并聚合统计 result = df.groupby(pd.cut(df['Est'], bins=bins)).agg( A=('Est', 'count'), # 统计区间内的总行数 B=('Buy', 'sum') # 统计区间内Buy=1的数量(sum直接得到1的个数) ).reset_index(drop=True) print(result)
关键步骤说明
- 区间划分:
pd.cut(df['Est'], bins=bins)会将Est的值按[1,2)、[2,3)、[3,4)、[4,5)的区间分类(默认右闭左开,刚好匹配需求的区间范围),生成的分类对象作为分组键。 - 聚合统计:
agg()方法可以同时指定多个统计规则,count用于统计每个区间的总行数,sum用于统计Buy列中1的数量(因为0求和不贡献数值,结果就是1的个数)。 - 索引重置:
reset_index(drop=True)移除分组产生的区间索引,生成符合预期的整数索引。
输出结果
A B 0 2 1 1 3 2 2 4 3 3 3 1
内容的提问来源于stack exchange,提问作者Jero
相关产品推荐
相关产品推荐

