Python 使用同一数据帧的特定列作为引用,同时从多个列中填充NaN值的最佳方法

Python 使用同一数据帧的特定列作为引用,同时从多个列中填充NaN值的最佳方法,python,pandas,fillna,Python,Pandas,Fillna,例如: DF=pd.DataFrame({'A':[0,0,np.NaN,0,np.NaN,0,0,0], ‘B’:[1,1,np.NaN,1,np.NaN,1,1,1], ‘C’:[8,8,np.NaN,8,np.NaN,np.NaN,8,8], ‘D’:[2,2,2,np.NaN,np.NaN,2,np.NaN,np.NaN], ‘E’:[3,3,3,np.NaN,np.NaN,3,np.NaN,np.NaN]}) 我希望得到的预期结果是尽可能地填充A列和B列,即: 1)如果DF['A']

例如:

DF=pd.DataFrame({'A':[0,0,np.NaN,0,np.NaN,0,0,0],
‘B’:[1,1,np.NaN,1,np.NaN,1,1,1],
‘C’:[8,8,np.NaN,8,np.NaN,np.NaN,8,8],
‘D’:[2,2,2,np.NaN,np.NaN,2,np.NaN,np.NaN],
‘E’:[3,3,3,np.NaN,np.NaN,3,np.NaN,np.NaN]})
我希望得到的预期结果是尽可能地填充A列和B列,即:

1)如果DF['A']行为NaN,则应获取对应的DF['D']行
2) 如果DF['B']行为NaN,则应获得相应的DF['E']行
3) DF['C']应保持原样
我正在努力:

DF[['A','B']]=DF[['A','B']].fillna(DF[['D','E']]
但似乎只有当两个不同的数据帧具有相同的列名称时,它才会起作用。我可以在DF1和DF2中拆分DF,将DF2['D']重命名为A,将DF2['E']重命名为B,然后执行以下操作:

DF1[['A','B']]=DF1[['A','B']].fillna(DF2[['A','B']]
但我认为这不是最好的办法。有什么想法吗

实际数据集有300万行,因此最好得到最有效的解决方案:)


谢谢!!:)

使用
np。其中
是一个很好的选择,因为它与底层numpy数组一起工作:

DF[['A','B']] = np.where(DF[['A','B']].isna(), DF[['D','E']], DF[['A','B']])
输出:

     A    B    C    D    E
0  0.0  1.0  8.0  2.0  3.0
1  0.0  1.0  8.0  2.0  3.0
2  2.0  3.0  NaN  2.0  3.0
3  0.0  1.0  8.0  NaN  NaN
4  NaN  NaN  NaN  NaN  NaN
5  0.0  1.0  NaN  2.0  3.0
6  0.0  1.0  8.0  NaN  NaN
7  0.0  1.0  8.0  NaN  NaN