Assuming I have the following toy dataset:
count orders books
1 40 2
1 60 4
1 80 6
2 10 8
2 30 10
2 50 12
I want to create new columns by transforming the dataset such that each column only contains orders
and books
by the count
group
This is the output:
orders_1 orders_2 books_1 books_2
40 10 2 8
60 30 4 10
80 50 6 12
I have attempted to use pivot tables, but the code throws me an error for using the same index
as well as columns
.
CodePudding user response:
Use GroupBy.cumcount
for counter, pivot by DataFrame.pivot
and last flatten MultiIndex in columns
:
df = df.assign(g = df.groupby('count').cumcount()).pivot('g','count')
df.columns = df.columns.map(lambda x: f'{x[0]}_{x[1]}')
print (df)
orders_1 orders_2 books_1 books_2
g
0 40 10 2 8
1 60 30 4 10
2 80 50 6 12