使用.loc与np.select按条件创建DataFrame新列失败,求解决
问题分析与解决方法
问题原因
你代码里的conditions列表使用to_test.loc[...]返回的是符合条件的DataFrame子集,但np.select要求每个条件必须是与原DataFrame行数一致的布尔数组(即每个元素是True/False,标记该行是否满足条件),这是导致代码无法运行的核心问题。
修正方案1:修复np.select的条件列表
直接使用布尔表达式生成布尔数组,替换原有的.loc调用:
import numpy as np # 生成布尔数组形式的条件列表 conditions = [ (to_test['averageRating'] >= 0.0) & (to_test['averageRating'] <= 3.3), (to_test['averageRating'] >= 3.4) & (to_test['averageRating'] <= 6.6), (to_test['averageRating'] >= 6.7) & (to_test['averageRating'] <= 10) ] values = ['group1', 'group2', 'group3'] # 可选:添加default参数处理超出0-10范围的异常评分 to_test['group'] = np.select(conditions, values, default='unknown') to_test.head()
修正方案2:使用pd.cut更简洁实现分箱
对于这种连续数值的区间分组,pandas的pd.cut是更高效简洁的方案:
import pandas as pd # 定义分箱边界和对应分组标签 bins = [0, 3.3, 6.6, 10] labels = ['group1', 'group2', 'group3'] # include_lowest=True 确保第一个区间包含最小值0.0 to_test['group'] = pd.cut(to_test['averageRating'], bins=bins, labels=labels, include_lowest=True) to_test.head()
内容的提问来源于stack exchange,提问作者Paula Pipkin
相关产品推荐
相关产品推荐

