如何为Pandas DataFrame指定列创建区间新列?是否有更高效实现方案?
高效实现方案
你可以直接用Pandas内置的pd.cut()方法实现需求,这是专门用于连续值分箱打标签的工具,相比多次loc条件赋值的写法,代码更简洁、执行效率更高,尤其是数据量较大时向量化操作的优势会非常明显。
匹配你需求的代码实现
import pandas as pd # 定义分箱边界,最后加30.1是为了单独匹配等于30的数值 bins = [5, 10, 15, 20, 25, 30, 30.1] # 定义每个区间对应的标签,顺序和bins划分出的区间一一对应 labels = ['<10-5]', '<15-10]', '<20-15]', '<25-20]', '<30-25]', '[30]'] # right=True表示区间为左开右闭,完全匹配你原有的区间判断规则 df['INTERVAL'] = pd.cut(df['AVERAGE'], bins=bins, labels=labels, right=True)
自动生成区间的方法
如果你不需要自定义区间标签,pd.cut()会自动生成标准区间格式的标识,示例如下:
# 自动生成类似(25, 30]的标准区间标签 df['INTERVAL'] = pd.cut(df['AVERAGE'], bins=bins, right=True)
如果连区间划分规则也不需要手动指定,想要按分位数自动划分等样本量的区间,可以使用pd.qcut()方法,适合需要均衡各区间样本数量的场景。
注意事项
如果你的数据集存在小于5或者大于30的数值,可以调整bins的边界适配,比如把最小边界设为-float('inf')、最大边界设为float('inf'),再对应补充标签即可覆盖所有取值。
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

