正在为熊猫中的if else语句寻找解决方案。示例:
col1 col2
1 NAN
2 NAN
3 NAN
NaN 01-2019
2 NAN
我的新列必须为col3;
我现在只有;当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
答案 0 :(得分:3)
在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())
答案 1 :(得分:0)
除了@jexrael出色的答案之外,另一种方法是使用apply
In [27]: def condition(r):
...: if r['col1'] >= 1: return "text a"
...: if pd.isnull(r['col1']) and pd.notnull(r['col2']): return r['col2']
...: return "text b"
...:
In [28]: df['col3'] = df.apply(condition, axis=1)
In [29]: df
Out[29]:
col1 col2 col3
0 1.0 NaN text a
1 2.0 NaN text a
2 3.0 NaN text a
3 NaN 01-2019 01-2019
4 2.0 NaN text a