如果另一列中的相应值也是NaN,则将一列中的所有值都设置为NaN

时间:2018-08-06 15:21:54

标签: python pandas dataframe updating

目标是通过将另一列中所有一列的值设置为NaN来保持两列之间的关系。

具有以下数据框:

df = pd.DataFrame({'a': [np.nan, 2, np.nan, 4],'b': [11, 12 , 13, 14]})

     a   b
0  NaN  11
1    2  12
2  NaN  13
3    4  14

维护从列a到列b的关系,其中所有NaN值都被更新,结果为:

     a    b
0  NaN  NaN
1    2   12
2  NaN  NaN
3    4   14

可以实现所需行为的一种方法是:

df.b.where(~df.a.isnull(), np.nan)

还有其他方法可以维持这种关系吗?

5 个答案:

答案 0 :(得分:9)

您可以在mask行上使用NaN

In [366]: df.mask(df.a.isnull())
Out[366]:
     a     b
0  NaN   NaN
1  2.0  12.0
2  NaN   NaN
3  4.0  14.0

对于列中的任何NaN,请使用df.mask(df.isnull().any(1))

答案 1 :(得分:2)

使用pd.Series.notnull避免采用布尔系列的负数:

df.b.where(df.a.notnull(), np.nan)

但是,实际上,您现有的解决方案没有任何问题。

答案 2 :(得分:1)

dropnareindex一起使用

df.dropna().reindex(df.index)
Out[151]: 
     a     b
0  NaN   NaN
1  2.0  12.0
2  NaN   NaN
3  4.0  14.0

答案 3 :(得分:1)

另一种可能是:

df.loc[df.a.isnull(), 'b'] = df.a

不是很短,但是可以完成工作。

答案 4 :(得分:1)

使用np.where()

df['b'] = np.where(df.a.isnull(), df.a, df.b)

工作-np.where(condition,[a,b])

根据a返回bcondition中的元素。

输出:

>>> df
    a       b
0   NaN     NaN
1   2.0     12.0
2   NaN     NaN
3   4.0     14.0