如何统计DataFrame中0至各指定上限区间内的数据点数量?
解决方案
因为你需要统计的是每个以上限为终点、0为固定起点的区间内的累计数据量,而pd.cut是将数据分配到互斥的区间中,每个数据点仅归属一个区间,所以确实不适合这个场景。直接针对每个目标上限统计col2 <= 上限的数量是更直接的方案:
步骤与代码实现
- 导入依赖库并创建原始DataFrame:
import pandas as pd import numpy as np data = [['A', 0.20], ['B',0.25], ['C',0.11], ['D',0.30], ['E',0.29]] df = pd.DataFrame(data, columns=['col1', 'col2'])
- 生成所有目标上限值(从0.30到0.01,步长0.01),同时处理浮点数精度问题:
# 生成倒序的上限序列,并用round修正浮点数精度 upper_bounds = np.round(np.arange(0.01, 0.31, 0.01)[::-1], 2)
- 统计每个区间
[0, upper]内的数据点数量,整理为结果DataFrame:
# 遍历每个上限,计算符合条件的行数 counts = [df['col2'].le(upper).sum() for upper in upper_bounds] # 构建结果表 result_df = pd.DataFrame({ '区间': [f'0-{upper}' for upper in upper_bounds], '数据点数量': counts }) # 查看结果 print(result_df.head())
运行后,前几行结果如下:
区间 数据点数量 0 0-0.3 5 1 0-0.29 4 2 0-0.28 3 3 0-0.27 3 4 0-0.26 3
补充说明
- 用
df['col2'].le(upper).sum()替代len(df[df['col2'] <= upper]),是更高效的pandas风格写法。 - 浮点数精度修正:直接使用
np.arange可能会出现类似0.29999999999999993的异常值,np.round(..., 2)可以确保上限值显示为正确的两位小数。
内容的提问来源于stack exchange,提问作者Aayush Gupta
相关产品推荐
相关产品推荐

