在 Pandas 中寻找 if else 语句的解决方案。例子:

col1  col2
1     NAN
2     NAN
3     NAN
NaN   01-2019
2     NAN

我的新专栏需要是 col3;
  • 当 col1 = 1 或更高时,添加 "text a"
  • 当 col1 = 空且 col2 = 一个值时,取 col2 的值
  • 其他;设置值“文本 b”

  • 我现在只有;当 col1 大于 1 时,设置文本 a,否则设置文本 b。
    df['col3'] = np.where(df['col1']>=1, 'text a', 'text b')
    

    但是缺少检查 col1 是否为空并且 col2 是否有值的部分。将该值放入 col3。

    我怎样才能做到这一点?

    谢谢!

    - 编辑 -

    当 col1 = 0 且 col2 具有值时,还询问了答案,以将 col3 设置为 col2 的值。

    所以也是:
    col1  col2
    0     01-2019
    

    最佳答案

    numpy.select Series.isna Series.notna 的测试缺失值和未缺失值一起使用:

    print (df)
       col1     col2
    0   0.0      NaN <-added row for test all coditions failed
    1   1.0      NaN
    2   2.0      NaN
    3   3.0      NaN
    4   NaN  01-2019
    5   2.0      NaN
    
    m1 = df['col1'] > =1
    m2 = df['col1'].isna() & (df['col2'].notna())
    #oldier pandas versions
    #m2 = df['col1'].isnull() & (df['col2'].notnull())
    df['col3'] = np.select([m1, m2], ['text a', df['col2']], 'text b')
    print (df)
       col1     col2     col3
    0   0.0      NaN   text b
    1   1.0      NaN   text a
    2   2.0      NaN   text a
    3   3.0      NaN   text a
    4   NaN  01-2019  01-2019
    5   2.0      NaN   text a
    

    np.where 的另一种解决方案:
    df['col3'] = np.where(m1, 'text a',
                 np.where(m2, df['col2'], 'text b'))
    

    编辑:

    条件改变:
    m2 = (df['col1'] == 0) & (df['col2'].notna())
    

    关于python - Pandas 如果其他为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52867600/

    10-15 07:52