заменить значения столбцов в одном фрейме данных значениями другого фрейма данных

у меня есть два фрейма данных, первый имеет 1000 строк и выглядит так:

Date            Group         Family       Bonus
2011-06-09      tri23_1       Laavin       456
2011-07-09      hsgç_T2       Grendy       679
2011-09-10      bbbj-1Y_jn    Fantol       431
2011-11-02      hsgç_T2       Gondow       569

столбец Group имеет разные значения, иногда повторяющиеся, но в целом около 50 уникальных значений.

второй таблицы данных содержит все эти 50 уникальных значений (50 строк), а также отели, которые связаны с этими значениями:

Group             Hotel
tri23_1           Jamel
hsgç_T2           Frank
bbbj-1Y_jn        Luxy
mlkl_781          Grand Hotel
vchs_94           Vancouver

моя цель-заменить значение в столбце Group первого фрейма данных по соответствующим значениям колонка Hotel второго фрейма данных/или создайте столбец Hotel с соответствующими значениями. Когда я пытаюсь сделать это просто задание

df1.loc[(df1.Group=df2.Group), 'Hotel']=df2.Hotel

у меня есть ошибка, что фреймы данных не имеют равного размера, поэтому сравнение невозможно

3 ответов


Если вы установите индекс в столбец "группа" на другом df, то вы можете заменить с помощью map в исходном столбце df 'Group':

In [36]:
df['Group'] = df['Group'].map(df1.set_index('Group')['Hotel'])
df

Out[36]:
         Date  Group  Family  Bonus
0  2011-06-09  Jamel  Laavin    456
1  2011-07-09  Frank  Grendy    679
2  2011-09-10   Luxy  Fantol    431
3  2011-11-02  Frank  Gondow    569

вы также можете создать словарь и использовать apply:

hotel_dict = df2.set_index('Group').to_dict()
df1['Group'] = df1['Group'].apply(lambda x: hotel_dict[x])

просто используйте pandas join, вы можете обратиться к подробной ссылке:http://pandas.pydata.org/pandas-docs/stable/merging.html

df1.join(df2,on='Group')