首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列表np.select分配条件并创建新列(pandas)

从列表np.select分配条件并创建新列(pandas)
EN

Stack Overflow用户
提问于 2021-11-03 11:33:40
回答 1查看 38关注 0票数 0

我有一个pandas数据帧(示例),如下所示:

代码语言:javascript
复制
ColA   MODEL_SCORE
B      300
A      400
L      500
K      600
C      400

...

我使用np.select来获得我的预期输出,正如你所看到的,我必须手动写下条件,但我的值显示在列表中。请让我知道,我如何利用这个列表来避免手动编写条件。谢谢

代码语言:javascript
复制
l = [443.42128478674164,
 488.37523204592253,
 518.0823073999817,
 541.0359169945577,
 555.8687207507057,
 567.4177820456491,
 579.8827874601552,
 589.7055254683078,
 599.4173064672602,
 606.7602443130553,
 614.6608818995334,
 624.0346335587483,
 632.7952850129415,
 641.7055745252072,
 650.3578400196975,
 660.2332325374314,
 670.7207392073833,
 685.3945990076263,
 705.084106536755,
 788.1550777011911]
代码语言:javascript
复制
conditions = 
[recent['MODEL_SCORE']<= 443.421285,
recent['MODEL_SCORE'] <= 488.375232,
recent['MODEL_SCORE'] <=518.082307,
recent['MODEL_SCORE'] <=541.035917,
recent['MODEL_SCORE'] <=555.868721,
recent['MODEL_SCORE'] <=567.417782,
recent['MODEL_SCORE'] <=579.882787,
recent['MODEL_SCORE'] <=589.705525,
recent['MODEL_SCORE'] <=599.417306,
recent['MODEL_SCORE'] <=606.760244,
recent['MODEL_SCORE'] <=614.660882,
recent['MODEL_SCORE'] <=624.034634,
recent['MODEL_SCORE'] <=632.795285,
recent['MODEL_SCORE'] <=641.705575,
recent['MODEL_SCORE'] <=650.357840,
recent['MODEL_SCORE'] <=660.233233,
recent['MODEL_SCORE'] <=670.720739,
recent['MODEL_SCORE'] <=685.394599,
recent['MODEL_SCORE'] <=705.084107,
recent['MODEL_SCORE'] <=788.155078]

choices = list(range(0,20))
recent['ranks'] = np.select(conditions,choices,default=99)

预期输出

代码语言:javascript
复制
ColA   MODEL_SCORE  ranks
B      300           0
A      400           0
L      500           2
K      600           9
C      400           0
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-03 11:43:55

cutlabels=False一起使用,将缺少的值替换为99

代码语言:javascript
复制
#add first group starting by 0
l = [0] + l
df['ranks'] = (pd.cut(df['MODEL_SCORE'], bins=l, labels=False, right=False)
                 .fillna(99)
                 .astype(int))
print (df)
  ColA  MODEL_SCORE  ranks
0    B          300      0
1    A          400      0
2    L          500      2
3    K          600      9
4    C        40000     99
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69824116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档