代码之家  ›  专栏  ›  技术社区  ›  RustyShackleford

如何针对硬编码的integer值执行多个if/else语句?

  •  0
  • RustyShackleford  · 技术社区  · 7 年前

    我有一个像这样的df:

      sentiment
    0 -0.1929
    1  0
    2  0.3
    

    如何将数据框中每一行的每个情感得分与硬编码整数进行比较,并创建一个新的列?

    例如:

    if df.sentiment >= 0.2:
       df['cate'] = 'positive'
    elif df.sentiment <= -0.2:
       df['cate'] = 'negative'
    else:
       df['cate'] = 'neutral'
    

    新的数据帧应该如下所示:

       sentiment      cate
        0 -0.1929     negative
        1  0          netural
        2  0.3        positive
    

    我一直在尝试这段代码:

    for row in df_sentences.iterrows():
        if df_sentences['sentiment'] >= 0.2:
            df_sentences['category'] = 'positive'
        elif df_sentences['sentiment'] <= 0.2:
            df_sentences['category'] = 'negative'
        else: 
            df_sentences['category'] = 'negative'
    

    但得到错误:

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   sacuL    7 年前

    使用 np.select :

    df['cate'] = np.select([df.sentiment >= 0.2, df.sentiment <= 0.2], ['positive', 'negative'], 'neutral')
    
    >>> df
       sentiment      cate
    0    -0.1929   neutral
    1     0.0000   neutral
    2     0.3000  positive