Python панды. Карта сохраняет только последние изменения - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь использовать pandas .map для редактирования набора данных, как показано в следующем коде:

df['Region'] = df['Region'].astype('category')
reg = df['Region']
cats = reg.cat.categories
ncats = len(cats)
n = len(os)

north = (...)
south = (...)
center = (...)
islands = (...)

d1 = {cats[i]:'South' for i in range(ncats) if cats[i] in south}
d2 = {cats[i]:'North' for i in range(ncats) if cats[i] in north}
d3 = {cats[i]:'Center' for i in range(ncats) if cats[i] in center}
d4 = {cats[i]:'Islands' for i in range(ncats) if cats[i] in islands}

df['Reg_cat'] = df['Region'].map(d1)
df['Reg_cat'] = df['Region'].map(d2)
df['Reg_cat'] = df['Region'].map(d3)
df['Reg_cat'] = df['Region'].map(d4)
df['Reg_cat'] = df['Reg_cat'].astype('category')
df['Reg_cat'].cat.categories
df['Reg_cat']

Код работает, но он применяет только последний запрос .map. Так что в этом случае применяется d4. Если d1 последний, он применяет этот. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Каждый последующий вызов map заменяет все, что не находится в преобразователе, на NaN.

Попробуйте создать один словарь и передать его.

m = {'North' : north, 'South' : south, 'Center' : center, 'Islands', islands}    
d = {v2 : k for k, v in m.items() for v2 in v}

df['Reg_cat'] = df['Reg_cat'].map(d)

Примечание:

  • тебе не нужно reg
  • вам не нужно cats
  • тебе не нужно ncats
  • вам также (что неудивительно) не нужны n, независимо от того, что равно
0 голосов
/ 03 мая 2018

Каждый раз, когда вы звоните df['Reg_cat'] = df['Region'].map(d#), вы перезаписываете значение df['Reg_cat']. Если вы хотите сохранить все значения, рассмотрите возможность их добавления в виде отдельных столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...