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