使用查找表填充另一个表pandas中的nans

时间:2018-03-09 21:27:51

标签: python pandas lookup

我有以下数据框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。感谢。

2 个答案:

答案 0 :(得分:1)

这应该有效:

s = lookup_df.set_index('val_a')['val_b']

df1['col_b'] = df1['col_b'].fillna(df1['col_b'].map(s))

<强>解释

  • 创建从val_aval_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