Питон панды: карта и возврат Нэн - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть два фрейма данных, первый:

id code
1   2
2   3
3   3
4   1

, а второй:

id code  name
1    1   Mary
2    2   Ben
3    3   John

Я хотел бы отобразить фрейм данных 1 так, чтобы онвыглядит так:

id code  name
1   2    Ben
2   3    John
3   3    John
4   1    Mary

Я пытаюсь использовать этот код:

mapping = dict(df2[['code','name']].values)
df1['name'] = df1['code'].map(mapping)

Мое сопоставление правильное, но все значения сопоставления NAN:

mapping = {1:"Mary", 2:"Ben", 3:"John"}

id code  name
1   2    NaN
2   3    NaN
3   3    NaN
4   1    NaN

Может кто-нибудь знает, почему и как решить?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

В качестве альтернативы используется dataframe.merge

df.merge(df2.drop(['id'],1), how='left', on=['code'])

Выход:

    id  code   name
0   1   2      Ben
1   2   3      John
2   3   3      John
3   4   1      Mery
0 голосов
/ 22 ноября 2018

Проблема заключается в различном типе значений в столбце code, поэтому необходимо преобразование в целые числа или строки на astype для одинаковых типов в обоих:

print (df1['code'].dtype)
object

print (df2['code'].dtype)
int64
print (type(df1.loc[0, 'code']))
<class 'str'>

print (type(df2.loc[0, 'code']))
<class 'numpy.int64'>

mapping = dict(df2[['code','name']].values)
#same dtypes - integers
df1['name'] = df1['code'].astype(int).map(mapping)
#same dtypes - object (obviously strings)
df2['code'] = df2['code'].astype(str)
mapping = dict(df2[['code','name']].values)
df1['name'] = df1['code'].map(mapping)

print (df1)
   id code  name
0   1    2   Ben
1   2    3  John
2   3    3  John
3   4    1  Mary
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...