Вот решение:
pvt1 = df.pivot(index='Item_Name', columns='Source1', values='Price1').reset_index()
pvt2 = df.pivot(index='Item_Name', columns='Source2', values='Price2').reset_index()
pvt = pd.merge(pvt1, pvt2, on='Item_Name')
, что дает нам:
Item_Name website1_x website3 website1_y website2
0 Soft_Drink 1.5 NaN NaN 2.5
1 Tea NaN 4.5 4.5 NaN
2 coffee 3.5 NaN NaN 3.5
Затем, это код, который в настоящее время обрабатывает website1, но его необходимо исправить, чтобы он действовал на все такие столбцы:
pvt['website1'] = pvt['website1_x'].combine_first(pvt['website1_y'])
pvt.drop(['website1_x', 'website1_y'], axis=1, inplace=True)
Выход:
Item_Name website3 website2 website1
0 Soft_Drink NaN 2.5 1.5
1 Tea 4.5 NaN 4.5
2 coffee NaN 3.5 3.5