如何对pandas DataFrame使用0.2/0.3非整数步长进行水平分箱?
报错原因
pd.cut的bins参数传入单个数值时,pandas会将其识别为分箱的总数量,要求必须为正整数,因此传入步长0.2会触发类型错误。
非整数步长分箱实现方案
方案1:自定义分箱边界传入pd.cut
先通过numpy生成固定步长的分箱边界,再将边界传入bins参数即可实现指定步长分箱,代码示例如下:
import numpy as np step = 0.2 # 可根据需求替换为0.3 # 生成分箱边界,末尾额外加一个步长是为了覆盖序列最大值 bin_edges = np.arange(f814w.min(), f814w.max() + step, step) # 完成分箱 f814w_cut = pd.cut(f814w, bins=bin_edges)
如果需要给每个分箱赋予中心点标签(方便后续色等图的分箱统计绘图),可以增加labels参数:
# 生成每个分箱的中心点作为标签 bin_labels = bin_edges[:-1] + step/2 f814w_cut = pd.cut(f814w, bins=bin_edges, labels=bin_labels)
方案2:取整法快速分组(适合分箱统计场景)
如果不需要返回Categorical类型的分箱结果,只需要按步长分组做后续统计,可直接用数值取整的方法实现,执行效率更高:
step = 0.2 # 新增列存储每条数据所属分箱的左边界 f814w['bin_left'] = (f814w // step) * step # 后续可直接基于bin_left列做groupby统计
内容的提问来源于stack exchange,提问作者surviving-grad
相关产品推荐
相关产品推荐

