目标是通过将另一列中所有一列的值设置为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)
还有其他方法可以维持这种关系吗?
答案 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)
答案 2 :(得分:1)
将dropna
与reindex
一起使用
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
返回b
或condition
中的元素。
输出:
>>> df
a b
0 NaN NaN
1 2.0 12.0
2 NaN NaN
3 4.0 14.0