df['idx'] = df.groupby('Salesman').cumcount()
tmp = []
for var in ['product', 'price']:
    df['tmp_idx'] = var + '_' + df.idx.astype(str)
tmp.append(df.pivot(index='Salesman', columns='tmp_idx', values=var))
reshape = pd.concat(tmp, axis=1)
Панды меняют форму от длинной до широкой