Как заменить значения в кадре данных на основе таблицы поиска в другом кадре данных - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь выяснить, как заменить значения заполнителя в моем наборе данных описаниями из таблицы поиска.

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

Итак, каждый столбец в моем наборе данных соответствует категории в таблице поиска. Я хотел бы go столбец за столбцом, соответствующий категории, а затем значение, чтобы заменить значения соответствующим описанием для каждого. Итак, это будет выглядеть примерно так:

    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

В настоящее время я работаю над созданием решения, используя словари для каждого столбца и отображая его, но это выглядит очень неуклюже, и мне нужно создать отдельный словарь для каждой категории. Конечно, я должен иметь возможность искать категорию, а затем значение, чтобы заменить значения?

1 Ответ

2 голосов
/ 30 марта 2020

использовать pandas ' метод замены : он будет искать ключи в df и заменять найденные ключи соответствующими значениями. У вашего df есть несколько пропущенных nans, поэтому я отредактировал его так, чтобы он соответствовал объявленному df u

  #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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...