【发布时间】:2021-03-05 05:12:54
【问题描述】:
我正在尝试使用数据框 f 替换数据框 d 中的空值。
d 和 f 由 EGI 链接。在d 中,EGI 是一个列并且不是唯一的。在f 中,EGI 是唯一的,并且是此数据帧的索引。
对于d 中的每一行,我需要该行中的值被f 中的行与对应的EGI“屏蔽”。
样本数据:
d = pd.DataFrame({'EGI':['a1','b2','a1','d4'],'A': ['x', np.nan, 'z', 'e'], 'B': [pd.NaT, 6, 7, 9], 'C': [2, 1, None, 9], 'D': [2, None, np.nan, None]})
EGI A B C D
0 a1 x NaT 2.0 2.0
1 b2 NaN 6 1.0 NaN
2 a1 z 7 NaN NaN
3 d4 e 9 9.0 NaN
f = pd.DataFrame({'B': [5, 8, 9], 'A': ['w', 'y', np.nan], 'D': [None, np.nan, 8], 'test': [5, 8, 9]}, index=['b2', 'a1', 'c3'])
B A D test
b2 5 w NaN 5
a1 8 y NaN 8
c3 9 NaN 8.0 9
预期输出:
EGI A B C D
0 a1 x 8 2.0 2.0
1 b2 w 6 1.0 NaN
2 a1 z 7 NaN NaN
3 d4 e 9 9.0 NaN
我尝试了什么:
m = d.isnull()
m.index = d['EGI'].tolist()
m = m.drop(['EGI'], axis = 1)
d.mask(m, f)
EGI A B C D
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN
【问题讨论】:
-
一种最简单的方法是,合并两个数据帧并将左列的 nan 填充到右列,然后删除右列。
标签: python pandas dataframe mask