【发布时间】:2019-08-27 13:47:50
【问题描述】:
给定以下数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame({"ColA": [1, 2, np.nan, 4, np.nan],
"ColB": [np.nan, 7, np.nan, 9, 10]})
ColA ColB
0 1.0 NaN
1 2.0 7.0
2 NaN NaN
3 4.0 9.0
4 NaN 10.0
我想用 ColB 的值替换 ColA 的值,但我不想用 NaN 值替换非 NaN 值。我想要的输出是以下 DataFrame:
ColA ColB
0 1.0 NaN
1 7.0 7.0
2 NaN NaN
3 9.0 9.0
4 10.0 10.0
我的实际数据非常大,所以虽然我知道我可以逐行迭代,但我正在寻找一种更有效的方法。
【问题讨论】:
-
看不到简单的
fillna在这里有什么帮助(关于欺骗) -
该问题与stackoverflow.com/questions/30357276/… 不重复。我不仅要填充 NaN 值,还要用另一列中的值替换一列中的所有值,除非另一列中的值是 NaN。
-
使用
numpy.where()。我无法回答,因为它已被标记为重复呵呵。 -
是的,它是重复的。已经回答了。你也可以选择
df['ColA'] = df.ColB.combine_first(df.ColA)