Задублировать строку при переименовании столбца DataFrame Pandas

Всем добрый день столкнулся с проблемой

Есть датафрейм с перечнем марок:

df = pd.DataFrame({'mark': 'VAG VAG vag vag MB MB Hyuindai/Kia'.split(),
'item': [7575, 77777, 25775, 175757, 3355353, 3566, 56363636]})

Есть словарь для переименования марок в читаемый вид:

dict2={'VAG':'Volkswagen',
       'vag':'Volkswagen',
       'MB':'Mercedes-benz', 
       'Mercedes':'Mercedes-benz', 
       'Hyuindai/Kia':'Kia',
       'Hyuindai/Kia':'Hyuindai'}

далее переименовываю значения в столбце

df['mark'] = df['mark'].replace(dict1)

На выходе получаю

       mark      item
0     Volkswagen      7575
1     Volkswagen     77777
2     Volkswagen     25775
3     Volkswagen    175757
4  Mercedes-benz   3355353
5  Mercedes-benz      3566
6       Hyuindai  56363636

Подскажите пожалуйста возможно ли как то сделать чтобы по ключу 'Hyuindai/Kia' добавлялась ещё одна строка с Kia?

Чтобы получилось примерно так

     mark      item
0     Volkswagen      7575
1     Volkswagen     77777
2     Volkswagen     25775
3     Volkswagen    175757
4  Mercedes-benz   3355353
5  Mercedes-benz      3566
6       Hyuindai  56363636
7            Kia  56363636

Ответы (1 шт):

Автор решения: strawdog

Вы понимаете, что у вас неверный словарь для замены? в словаре не могут быть два элемента с одинаковыми ключами. Предлагаю сделать так:

import pandas as pd

df = pd.DataFrame({'mark': 'VAG VAG vag vag MB MB Hyuindai/Kia'.split(),'item': [7575, 77777, 25775, 175757, 3355353, 3566, 56363636]})

dict3={'VAG':'Volkswagen',
       'vag':'Volkswagen',
       'MB':'Mercedes-benz', 
       'Mercedes':'Mercedes-benz', 
       'Hyuindai/Kia':['Kia', 'Hyuindai']}
df['mark'] = df['mark'].map(dict3).fillna(df['mark']) #обновлено

вы получите такой датафрейм:

              mark      item
0       Volkswagen      7575
1       Volkswagen     77777
2       Volkswagen     25775
3       Volkswagen    175757
4    Mercedes-benz   3355353
5    Mercedes-benz      3566
6  [Kia, Hyuindai]  56363636

а теперь просто:

res = df.explode('mark').reset_index(drop=True)

и получаете res:

            mark      item
0     Volkswagen      7575
1     Volkswagen     77777
2     Volkswagen     25775
3     Volkswagen    175757
4  Mercedes-benz   3355353
5  Mercedes-benz      3566
6            Kia  56363636
7       Hyuindai  56363636
→ Ссылка