карта панд в словарь массива - PullRequest
1 голос
/ 08 марта 2019

У меня есть df кодов стран:

  cntr
0 CN
1 CH

, и я хочу отобразить полное имя и регион из словаря

cntrmap = {"CN":["China","Asia"],"CH":["Switzerland","Europe"]}

Я надеялся на что-то вродеэто, но не работает ..

df['name'] = df['cntr'].map(cntrmap)[0]
df['region'] = df['cntr'].map(cntrmap)[1]

у вас, ребята, есть предложения?спасибо всем!

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Можно добиться того же с map:

df.join(pd.DataFrame(df['cntr'].map(m).tolist(), columns=['name', 'region']))

Вывод:

  cntr         name  region
0   CN        China    Asia
1   CH  Switzerland  Europe
1 голос
/ 08 марта 2019

Вы можете создать вспомогательный DataFrame с помощью DataFrame.from_dict и DataFrame.join до исходного DataFrame по умолчанию, оставленного соединения:

df = pd.DataFrame({'cntr':['CN','CH']})

cntrmap = {"CN":["China","Asia"],"CH":["Switzerland","Europe"]}

df1 = pd.DataFrame.from_dict(cntrmap, orient='index', columns=['name','region'])

df = df.join(df1, on='cntr')
print (df)
  cntr         name  region
0   CN        China    Asia
1   CH  Switzerland  Europe

Ваше решение работает, если создать 2 словаря для map:

map1 = {k:v[0] for k, v in cntrmap.items()}
map2 = {k:v[1] for k, v in cntrmap.items()}

df['name'] = df['cntr'].map(map1)
df['region'] = df['cntr'].map(map2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...