熊猫,如果是空的

时间:2018-10-18 05:38:02

标签: python pandas csv if-statement

正在为熊猫中的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

2 个答案:

答案 0 :(得分:3)

numpy.selectSeries.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