DataFrame数值分组报错:将Values列划分为low/middle/high三类的问题
问题解决方法
错误原因分析
你的代码报错核心有两个问题:
- 函数参数不能用字符串
"Values",这是非法的参数命名方式,需改用普通变量名(比如val) - 判断条件里把字符串
"Values"/'Values'和数字比较,会触发类型错误——字符串与数字无法直接比较大小
修正后的自定义函数方法
先修复函数逻辑,再通过 apply 生成新分类列:
import pandas as pd # 构造你的DataFrame data = { 'Datapoint': [1,2,3,4,5,6,7,8,9,10], 'Values': [0.2,0.8,0.4,0.1,1.0,0.6,0.7,0.2,0.5,0.1] } df = pd.DataFrame(data) # 修正后的分类函数 def categorize_values(val): if val > 0.75: return 'high' elif val < 0.25: return 'low' else: return 'middle' # 新增分类列 df['Category'] = df['Values'].apply(categorize_values)
更高效的pandas内置方法(推荐)
对于批量数据处理,用 pd.cut 比自定义函数+apply 效率更高,尤其适合大数据集:
# 定义区间边界和对应标签 bins = [-float('inf'), 0.25, 0.75, float('inf')] labels = ['low', 'middle', 'high'] # 生成分类列 df['Category'] = pd.cut(df['Values'], bins=bins, labels=labels, include_lowest=True)
最终结果
处理后DataFrame会新增Category列,内容如下:
| Datapoint | Values | Category |
|---|---|---|
| 1 | 0.2 | low |
| 2 | 0.8 | high |
| 3 | 0.4 | middle |
| 4 | 0.1 | low |
| 5 | 1.0 | high |
| 6 | 0.6 | middle |
| 7 | 0.7 | middle |
| 8 | 0.2 | low |
| 9 | 0.5 | middle |
| 10 | 0.1 | low |
内容的提问来源于stack exchange,提问作者Niamh
相关产品推荐
相关产品推荐

