我有以下数据框df1
:
col_a | col_b |
===============
101 | abc |
102 | def |
103 | NaN |
104 | pqr |
105 | NaN |
我想使用相应的查找表lookup_df
使用正确的值填充这些NaN值,如下所示:
val_a | val_b |
===============
101 | abc |
102 | def |
103 | ghi |
104 | pqr |
105 | stu |
我知道我可以进行左合并,但由于col_a
中的值可能相同,因此我希望通过查看lookup_df
来填充所有NAN。感谢。
答案 0 :(得分:1)
这应该有效:
s = lookup_df.set_index('val_a')['val_b']
df1['col_b'] = df1['col_b'].fillna(df1['col_b'].map(s))
<强>解释强>
val_a
到val_b
的映射。fillna
。{/ li>中的col_b
条目
pd.Series.map
接受一个系列作为输入。答案 1 :(得分:0)
只有在val_a中找到col_a中的所有值时,这才有效。如果没有,请告诉我并找到另一种解决方案。感谢。
df1['col_b'] = df1['col_a'] \
.apply(lambda col_a: lookup_df['val_b'][lookup_df['val_a'] == col_a] \
.values[0])
print(df1)
Input:
col_a col_b
0 101 abc
1 102 def
2 103 NaN
Sample result:
col_a col_b
0 101 abc
1 102 def
2 103 cat