Как создать столбец для заполнения идентификатора, сопоставленного с меньшим кадром данных? - PullRequest
0 голосов
/ 06 октября 2018

У меня есть два фрейма данных, один с большим количеством строк, которые содержат повторяющееся свойство CategoryId, а другой фрейм данных имеет только два столбца: CategoryId и Category:

print(map)
   CategoryId  Category
1  n013523     Snake
2  n012837     Iguana
3  n092735     Dragon

map.shape
(3, 2)


print(data)
   CategoryId  Size
1  n013523     0.4
2  n013523     0.8
3  n013523     0.15
4  n012837     0.16
5  n012837     0.23
6  n012837     0.42
...

data.shape
(500000, 2)

ЧтоЯ хотел бы сделать, это создать столбец данных, который будет иметь значение в map['Category'], где map['CategoryId'] == data['CategoryId'], таким образом, чтобы вывод:

print(data)
   CategoryId  Size  Category
1  n013523     0.4   Snake
2  n013523     0.8   Snake
3  n013523     0.15  Snake
4  n012837     0.16  Iguana
5  n012837     0.23  Iguana
6  n012837     0.42  Iguana
...

1 Ответ

0 голосов
/ 06 октября 2018

Используйте map как:

map.set_index('CategoryId',inplace=True)
data['Category'] = data['CategoryId'].map(map['Category'],na_action=np.nan)

Или используя merge как:

data = data.merge(map,how='left',on='CategoryId')

Или используя dict и map:

data['Category'] = data.CategoryId.map(dict(map.values),na_action=np.nan)

Или использование dict и замена этого могут привести к ошибке, если словарь key отсутствует .:

data['Category'] = data.CategoryId.replace(dict(map.values))

print(data)
      CategoryId  Size Category
    1    n013523  0.40    Snake
    2    n013523  0.80    Snake
    3    n013523  0.15    Snake
    4    n012837  0.16   Iguana
    5    n012837  0.23   Iguana
    6    n012837  0.42   Iguana
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...