#python #pandas #merge #inner-join
Вопрос:
У меня есть фрейм данных, такой как :
ItemName Category
item1 cat1
item2 cat1
item3 cat1
item4 cat1
item5 cat2
item6 cat2
и такой, как:
CategoryName Element
cat1 element1
cat2 element2
Я хочу объединить оба кадра данных в один на основе столбца категории, но теперь у меня есть два столбца с категориями.
Это был бы идеальный результат:
ItemName Category Element
item1 cat1 element1
item2 cat1 element1
item3 cat1 element1
item4 cat1 element1
item5 cat2 element2
item6 cat2 element2
Но у меня есть результат с дубликатом категории столбца и имени категории. Как решить эту проблему с дублированием при объединении кадров данных? Что я сделал для слияния:
result_df= df1.merge(
df2,
left_on='Category',
right_on='CategoryName',
how='inner')
Ответ №1:
К сожалению, вам придется переименовать столбцы:
>>> df1.merge(df2.rename({'CategoryName': 'Category'}, axis=1), on='Category')
ItemName Category Element
0 item1 cat1 element1
1 item2 cat1 element1
2 item3 cat1 element1
3 item4 cat1 element1
4 item5 cat2 element2
5 item6 cat2 element2
>>>
Или тебе придется это бросить:
>>> df1.merge(df2, left_on='Category', right_on='CategoryName').drop('CategoryName', axis=1)
ItemName Category Element
0 item1 cat1 element1
1 item2 cat1 element1
2 item3 cat1 element1
3 item4 cat1 element1
4 item5 cat2 element2
5 item6 cat2 element2
>>>
Ответ №2:
Вы можете использовать pd.Series.map
:
df["Element"] = df["Category"].map(df2.set_index("CategoryName")["Element"])
print (df)
ItemName Category Element
0 item1 cat1 element1
1 item2 cat1 element1
2 item3 cat1 element1
3 item4 cat1 element1
4 item5 cat2 element2
5 item6 cat2 element2