首页 > 解决方案 > 如何根据另一个数据框中的查找表替换数据框中的值

问题描述

我试图弄清楚如何用查找表中的描述替换我的数据集中的占位符值。

import pandas as pd

#Survey Data
df=pd.DataFrame({
                  'age':[653,653,654,653,653],
                  'cty':[1056,1056,1158,1158,1203],
                  'eth':[545,545,530,530,545]
                  })

    age  cty   eth
0   653  1056  NaN
1   653  1056  545
2   654  NaN   530
3   653  1158  530
4   653  1203  545

#Lookup table
lookup=pd.DataFrame({'category':['age', 'age', 'cty','cty', 'cty','eth','eth'], 
                     'value':[653,654,1056,1158,1203,545,530],
                     'description':['30 to 39','40 to 49','Belgium','Taiwan','Czech Republic',
                                     'White','Other']})

    category  value  description
0   age       653    30 to 39 
1   age       654    40 to 49
2   cty       1056   Belgium
3   cty       1158   Taiwan
4   cty       1203   Czech Republic
5   eth       545    White
6   eth       530    Other

因此,我的数据集中的每一列都与查找表中的一个类别相匹配。我想逐列,匹配类别,然后是值,用每个值的适当描述替换值。所以,它看起来像这样:

    age        cty             eth
0   30 to 39   Belgium         NaN
1   30 to 39   Belgium         White
2   40 to 49   NaN             Other
3   30 to 39   Taiwan          Other
4   30 to 39   Czech Republic  White

目前,我正在为每一列使用字典构建解决方案并对其进行映射,但这看起来很笨拙,我必须为每个类别创建一个单独的字典。当然,我应该能够查找类别,然后查找替换值的值?

标签: pythonpandasdataframe

解决方案


使用 pandas 的 replace方法:它将在数据框中搜索键并将找到的键替换为关联的值。您的数据框缺少一些 NaN,因此我对其进行了编辑以匹配您发布的内容

  #create a dictionary from the lookup
  repl = lookup.set_index('value')['description'].to_dict()

  #print(repl)
  
  {653: '30 to 39',
   654: '40 to 49', 
   1056: 'Belgium', 
   1158: 'Taiwan', 
   1203: 'Czech Republic',
   545: 'White', 
   530: 'Other'}

  #pass it using pandas' replace method
  df.replace(repl)

  
      age         cty            eth
0   30 to 39    Belgium          NaN
1   30 to 39    Belgium          White
2   40 to 49    NaN               Other
3   30 to 39    Taiwan           Other
4   30 to 39    Czech Republic  White

推荐阅读