Вы можете решить это без MinMaxScaler:
df["norm"]=df.groupby("Customer").apply(\
lambda grp: grp.price.div(grp.price.max()) ).values
Customer price norm
0 A 0 0.000000
1 A 3 0.428571
2 A 7 1.000000
3 A 0 0.000000
4 A 0 0.000000
5 B 2 1.000000
6 B 2 1.000000
7 B 0 0.000000
8 C 5 1.000000
9 C 1 0.200000
10 D 0 0.000000
11 D 0 0.000000
12 D 15 1.000000
13 D 0 0.000000
Редактировать: Для другой нормализации вы можете разделить на grp.price.sum () вместо grp.price.max ().
Edit2: Для других столбцов вы можете сделать:
cols=["price","weights"] # group the requested column names
df2= df.groupby("Customer").apply(lambda grp: grp[cols].div(grp[cols].max()) )
new_df=pd.concat([df,df2],axis=1)
Вы должны переименовать последние, нормализованные столбцы:
new_df.columns
Index(['Customer', 'price', 'weight', 'price', 'weight'], dtype='object')
new_df.columns= df.columns.append(pd.Index(["norm_"+c for c in df2.columns]))