You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Python DataFrame中的数值按100区间进行分类?

数值区间分类问题解决

问题需求

需要将采集的数据按100间隔划分区间,分类为0-100、100-200、200-300等区间。

输入DataFrame:

import pandas as pd
df = pd.DataFrame([112,341,234,78,154],columns=['value'])

数据展示:

value
0   112
1   341
2   234
3   78
4   154

期望输出:

value  value_range
0   112    100-200
1   341    200-400
2   234    200-300
3   78     0-100
4   154    100-200

用户编写的错误代码:

df['value_range'] = df['value'].apply(lambda x:[a,b] if x>a and x<b for a,b in zip([0,100,200,300,400],[100,200,300,400,500]))

执行报错:

SyntaxError: invalid syntax

错误分析

你的lambda表达式语法逻辑错误,if条件与循环的顺序不符合Python语法规范,无法正常解析。针对这类数值分箱需求,更高效的方式是使用pandas内置的pd.cut方法,也可以修正lambda的写法实现。

解决方案

方法一:使用pd.cut(推荐)

pd.cut是pandas专门为数值分箱设计的函数,代码简洁且处理效率更高:

import pandas as pd

df = pd.DataFrame([112,341,234,78,154],columns=['value'])

# 定义区间边界与对应标签
bins = [0, 100, 200, 300, 400, 500]
labels = ['0-100', '100-200', '200-300', '300-400', '400-500']

# 针对341需要归为200-400的需求,调整区间边界即可
bins_adjusted = [0, 100, 200, 400, 500]
labels_adjusted = ['0-100', '100-200', '200-400', '400-500']

# right=False设置左闭右开区间,include_lowest=True确保0值被包含在第一个区间
df['value_range'] = pd.cut(df['value'], bins=bins_adjusted, labels=labels_adjusted, right=False, include_lowest=True)

print(df)

执行输出:

value value_range
0    112    100-200
1    341    200-400
2    234    200-400
3     78     0-100
4    154    100-200

如果需要234归为200-300,直接使用初始的bins和labels即可。

方法二:修正lambda表达式写法

如果坚持用apply配合lambda,需要调整语法,用生成器+next()找到匹配的区间:

df['value_range'] = df['value'].apply(
    lambda x: next(f"{a}-{b}" for a, b in zip([0,100,200,300,400],[100,200,300,400,500]) if a <= x < b)
)

这段代码会遍历所有区间,返回第一个满足a <= x < b的区间字符串。但数据量较大时,效率不如pd.cut。

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:20:28