代码之家  ›  专栏  ›  技术社区  ›  Ben P

使用if/else为每行指定一个离散值

  •  1
  • Ben P  · 技术社区  · 6 年前

    我有一个python项目,它为网站用户评分,输出的是一个介于0和1之间的浮点数。例如:

       User      score
    0  123       0.04355
    1  456       0.01074
    2  789       0.00000
    3  987       0.00000
    4  654       0.00000
    

    我想在我的数据中添加第二列,并使用谨慎的条带,如“high”、“medium”和“low”——在python中,最好的方法是什么?

    到目前为止我试过 IF 声明,它不起作用,但希望能说明我要做的:

    if logreg_results.propensity >= 0.90:
        logreg_results.band = "High"
    elif logreg_results.propensity < 0.90 >= 0.70:
        logreg_results.band = "Good"
    elif logreg_results.propensity <0.70 >= 0.50:
        logreg_results.band = "fair"
    

    期望输出:

       User      score       Banding
    0  123       0.04355     High
    1  456       0.01074     Good
    2  789       0.00000     Poor
    3  987       0.00000     Poor
    4  654       0.00000     Poor
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    使用 cut 带参数 right=False 对于包括最右边的边:

    bins = [-np.inf, .5, .7, .9, np.inf]
    labels = ['Low', 'Fair', 'Good', 'High']
    df['Banding'] = pd.cut(df['score'], bins=bins, labels=labels, right=False)
    print (df)
    
       User   score Banding
    0   123  0.7355    Good
    1   456  0.6074    Fair
    2   789  0.9000    High
    3   987  0.5000    Fair
    4   654  0.0000     Low
    
        2
  •  0
  •   zipa    6 年前

    这将解决问题:

    if logreg_results.propensity >= 0.90:
        logreg_results.band = "High"
    elif logreg_results.propensity >= 0.70:
        logreg_results.band = "Good"
    elif logreg_results.propensity >= 0.5:
        logreg_results.band = "fair"
    

    如果第一个子句失败了,它肯定不会比 0.9 等等。