Объединить кадры данных на основе значений из разных наборов данных - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть следующие фреймы данных:

print(df)

id_code turnover costs 
 001      100     200
 002      100     200
 003      100     200
 004      100     200

print(df_db)

Description Code1, Code2, ... CodeN
Retail        001    002  ... nan
Wholesale     003    nan  ... nan
Supply        004    nan  ... nan

И я хотел бы создать следующий final_df, добавив столбец, представляющий описание в df_db;в основном, если id_code присутствует в строке df_db, объедините значения:

print(final_df)

    id_code turnover costs Description
     001      100     200     Retail
     002      100     200     Retail
     003      100     200     Wholesale
     004      100     200     Supply

Я пробовал с pd pivot, но он не сообщает о желаемом результате. Как я могу получить final_df?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Используйте DataFrame.melt + Series.map , если в df_db нет повторяющихся кодов:

mapper=df_db.melt('Description').set_index('value')['Description']
df['Description']=df['id_code'].map(mapper)
print(df)

   id_code  turnover  costs Description
0        1       100    200      Retail
1        2       100    200      Retail
2        3       100    200   Wholesale
3        4       100    200      Supply

Деталь:

print(mapper)
value
1       Retail
3    Wholesale
4       Supply
2       Retail
5    Wholesale
6       Supply
Name: Description, dtype: object
0 голосов
/ 08 ноября 2019

Мы используем melt до merge

final_df=df.merge(df_db.melt('Description').drop('variable',1),left_on='id_code',right_on='value').\
  drop('value',1)
Out[157]: 
  id_code  turnover  costs Description
0       1       100    200      Retail
1       2       100    200      Retail
2       3       100    200   Wholesale
3       4       100    200      Supply
...