df = {'A':[3, 4, 5, np.nan, 6, 7],
'B':[np.nan, 4, np.nan, np.nan, 6, 7]}
我有一个包含两列 A 和 B 的数据框。我想创建一个新列 C,这是检查 A 和 B 是否相同的结果,如果相同则保留它,但如果一个为 NaN,则保留其他值。 A 列和 B 列始终是值或 NaN。 A 和 B 中的值始终相同。
我知道如何检查 A 和 B 是否相同:
df['C'] = (df['A'] == df['B]).astype('object')
但这在 C 列中给出了一个 bool 值答案,无论它是对还是错。我的预期输出是:
A B C
3 NaN 3
4 4 4
5 NaN 5
NaN NaN NaN
6 6 6
7 7 7
你可以使用np.where()
>>> df = pd.DataFrame({'A':[3, 4, 5, np.nan],'B':[np.nan,4,np.nan,np.nan]})
>>> df
A B
0 3.0 NaN
1 4.0 4.0
2 5.0 NaN
3 NaN NaN
>>> df['C'] = np.where(df['A'].isna(), df['B'], df['A'])
>>> df
A B C
0 3.0 NaN 3.0
1 4.0 4.0 4.0
2 5.0 NaN 5.0
3 NaN NaN NaN
编辑样本
如果 df['A']
是 nan 并且 df['B']
有值,它会起作用。
>>> df = pd.DataFrame({'A':[3, np.nan, 5, np.nan],'B':[np.nan,4,np.nan,np.nan]})
>>> df
A B
0 3.0 NaN
1 NaN 4.0
2 5.0 NaN
3 NaN NaN
>>> df['C'] = np.where(df['A'].isna(), df['B'], df['A'])
>>> df
A B C
0 3.0 NaN 3.0
1 NaN 4.0 4.0
2 5.0 NaN 5.0
3 NaN NaN NaN
谢谢:D