我无法理解这一点。我有一个包含以下值的数据框:
df = pd.DataFrame([
(1,np.nan,"a"),
(1,"a",np.nan),
(1,np.nan,"b"),
(1,"c","b"),
(2,"a",np.nan),
(2,np.nan,"b"),
(3,"a",np.nan)], columns=["A", "B", "C"])
转化为
A B C
0 1 NaN a
1 1 a NaN
2 1 NaN b
3 1 c b
4 2 a NaN
5 2 NaN b
6 3 a NaN
我想要的是,如果我在“B”中有空值/空字段,则应该用“C”中的值替换它。像这样:
A B C
0 1 a a
1 1 a NaN
2 1 b b
3 1 c b
4 2 a NaN
5 2 b b
6 3 a NaN
我当然可以为值输入:
df.loc[df.B.isnull()]
但我无法设法从另一列分配值:
df.loc[df.B.isnull()] = df.C
据我所知,我想用C列中的七个条目替换三个NaN,因此它不匹配。那么如何获得相应的值?
答案 0 :(得分:1)
您可以使用:
df.loc[df.B.isnull(), 'B'] = df.C
输出:
A B C
0 1 a a
1 1 a NaN
2 1 b b
3 1 c b
4 2 a NaN
5 2 b b
6 3 a NaN
df.B.where(pd.notnull, df.C, inplace=True)
答案 1 :(得分:1)
你可以使用combine_first,它似乎也快得多
df.B = df.B.combine_first(df.C)
1000 loops, best of 3: 764 µs per loop
df.loc[df.B.isnull(), 'B'] = df.C
100 loops, best of 3: 1.54 ms per loop
你得到了
A B C
0 1 a a
1 1 a NaN
2 1 b b
3 1 c b
4 2 a NaN
5 2 b b
6 3 a NaN