Pandas: сопоставить значения словаря для существующего столбца на основе ключа из другого столбца, чтобы заменить NaN - PullRequest
2 голосов
/ 12 марта 2020

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

df = 
       Job Number Department Code
    0      3525             403
    1      4555             NaN
    2      5575             407
    3      6515             407
    4      7525             NaN
    5      8535             102
    6      3545             403
    7      7455             102
    8      3365             NaN
    9      8275             403
    10     3185             408

dict = {'4555': '012', '7525': '077', '3365': '034'}

Я надеюсь, что результат будет выглядеть так:

       Job Number Department Code
    0      3525             403
    1      4555             012
    2      5575             407
    3      6515             407
    4      7525             077
    5      8535             102
    6      3545             403
    7      7455             102
    8      3365             034
    9      8275             403
    10     3185             408

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

df['Department Code'].replace(dict, inplace=True)

Это не заменяет значения NaN .

Я уверен, что ответ очень прост, и я заранее извиняюсь, но я просто застрял.

(Извините за плохое отображение кода, он написан от руки, так как не уверен, как экспортировать код от python до сюда.)

Ответы [ 2 ]

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

Лучше избегать переменной dict, потому что builtin (python кодовое слово), затем используйте Series.fillna для замены совпадающих значений на Series.map, если возвращаемые значения не совпадают NaN, поэтому замена отсутствует:

d = {'4555': '012', '7525': '077', '3365': '034'}
df['Department Code'] = df['Department Code'].fillna(df['Job Number'].astype(str).map(d))
print (df)
    Job Number Department Code
0         3525             403
1         4555             012
2         5575             407
3         6515             407
4         7525             077
5         8535             102
6         3545             403
7         7455             102
8         3365             034
9         8275             403
10        3185             408
1 голос
/ 12 марта 2020

Или другой способ использования set_index и fillna:

df['Department Code'] = (df.set_index('Job Number')['Department Code']
                           .fillna(d).values)


print(df)

     Job Number Department Code
0       3525            403
1       4555            012
2       5575            407
3       6515            407
4       7525            077
5       8535            102
6       3545            403
7       7455            102
8       3365            034
9       8275            403
10      3185            408
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...