Use GroupBy.cumcount
for counter, unpivot by DataFrame.melt
, pivoting by DataFrame.pivot
and last DataFrame.add_prefix
:
df1 = (df.assign(g = df.groupby('Type').cumcount().add(1))
.melt(['Type','g'], var_name='Params')
.pivot(index=['Type','Params'], columns='g', values='value')
.add_prefix('Value'))
print (df1)
g Value1 Value2
Type Params
A Parameter 1 1 3
Parameter 2 2 10
Parameter 3 4 1
B Parameter 1 2 4
Parameter 2 5 8
Parameter 3 9 2
Or DataFrame.set_index
with DataFrame.stack
and Series.unstack
:
df1 = (df.set_index(['Type', df.groupby('Type').cumcount().add(1)])
.stack()
.unstack(level=1)
.add_prefix('Value')
.rename_axis(['Type','Params'])
)
print (df1)
Value1 Value2
Type Params
A Parameter 1 1 3
Parameter 2 2 10
Parameter 3 4 1
B Parameter 1 2 4
Parameter 2 5 8
Parameter 3 9 2