Чтобы полностью ответить на ваш вопрос, включая дополнительные столбцы:
Сначала мы создадим ваш свод и соответственно переименуем столбцы:
Шаг 1: сводите и переименуйте
pivot = df.pivot_table(index=['Service', 'Weight', 'Area'],
columns='Carrier',
values='Charge',
aggfunc=lambda x: ' '.join(x))
pivot.columns = [pivot.columns.name + col + '_Charge' for col in pivot.columns]
pivot.reset_index(inplace=True)
Service Weight Area CarrierA_Charge CarrierB_Charge
0 GRND 1 2 $5.0 $5.5
1 GRND 2 2 $6.0 NaN
2 GRND 3 2 $7.0 $6.9
Шаг 2: создайте дополнительные столбцы:
cols = ['CarrierA_Charge', 'CarrierB_Charge']
for col in cols:
pivot[col] = pivot[col].str.replace('$', '').astype(float)
pivot['min_charge'] = pivot[['CarrierA_Charge', 'CarrierB_Charge']].min(axis=1)
pivot['min_charge_carrier'] = np.where(pivot['min_charge'].eq(pivot['CarrierA_Charge']),
'A', 'B')
Service Weight Area CarrierA_Charge CarrierB_Charge min_charge min_charge_carrier
0 GRND 1 2 5.0 5.5 5.0 A
1 GRND 2 2 6.0 NaN 6.0 A
2 GRND 3 2 7.0 6.9 6.9 B