Python中如何将pandas数据列的数值按指定区间归类打标签?
Pandas 数值区间分类实现方案
直接使用pandas内置的pd.cut()分箱函数即可完成需求,无需手动编写判断条件或循环,代码如下:
import pandas as pd # 构造示例数据集,实际使用时替换为自己的df即可 data = {'duration_ms': [3203, 4583, 7789, 189654, 512300, 6523, 42358]} df = pd.DataFrame(data) # 定义区间边界,单位为ms,可根据需求灵活调整 bins = [0, 100000, 150000, 200000, 250000, 300000, 350000, 400000, 450000, 500000, 550000, 600000] # 定义区间对应的标签,和上面的bins顺序一一对应 labels = ['0k~100k', '100k~150k', '150k~200k', '200k~250k', '250k~300k', '300k~350k', '350k~400k', '400k~450k', '450k~500k', '500k~550k', '550k~600k'] # 执行分箱,right=False代表区间为左闭右开,符合 >=左边界 且 <右边界 的判断规则 df['duration_cat'] = pd.cut(df['duration_ms'], bins=bins, labels=labels, right=False) # 输出结果验证 print(df)
运行输出结果
duration_ms duration_cat 0 3203 0k~100k 1 4583 0k~100k 2 7789 0k~100k 3 189654 150k~200k 4 512300 500k~550k 5 6523 0k~100k 6 42358 0k~100k
之前代码错误说明
- 第一种字典定义写法:pandas序列的布尔运算不能使用Python原生的
and/or,需要用&/|,且每个判断条件必须用括号包裹,同时逐一定义区间的方式维护成本极高,不推荐使用。 - 第二种循环写法:遍历逻辑错误,
for i in df['duration_cat']取出的i是字段值不是索引,直接用df['duration_cat'][i]取值会报错,同时循环内的return、字典赋值逻辑完全不符合需求。
内容的提问来源于stack exchange,提问作者LorenzoH
相关产品推荐
相关产品推荐

