Having a dataframe as below:
df = pd.DataFrame({'A': ['John', 'Boby', 'Mina', 'Peter', 'Nicky','Teena'],
'B': ['John', 'Boby', 'Mina', 'Peter', 'Nicky','Teena'],
'C': [27, 23, 21, 23, 24,20]})
df
I created a pivot table using following code.
a=df.pivot_table(index="A", columns="B", values="C")
a
I need Nicky
in the first row of pivot table. Is that possible?
CodePudding user response:
Use reindex
on your columns just with the wanted columns first:
first = ['Nicky']
order = first list(a.index.difference(first))
a.reindex(order)
Output:
B Boby John Mina Nicky Peter Teena
A
Nicky NaN NaN NaN 24.0 NaN NaN
Boby 23.0 NaN NaN NaN NaN NaN
John NaN 27.0 NaN NaN NaN NaN
Mina NaN NaN 21.0 NaN NaN NaN
Peter NaN NaN NaN NaN 23.0 NaN
Teena NaN NaN NaN NaN NaN 20.0
If you want both Index and columns:
first = ['Nicky']
order = first list(a.index.union(a.columns).difference(first))
a.reindex(index=order, columns=order)
Output:
B Nicky Boby John Mina Peter Teena
A
Nicky 24.0 NaN NaN NaN NaN NaN
Boby NaN 23.0 NaN NaN NaN NaN
John NaN NaN 27.0 NaN NaN NaN
Mina NaN NaN NaN 21.0 NaN NaN
Peter NaN NaN NaN NaN 23.0 NaN
Teena NaN NaN NaN NaN NaN 20.0
reindex
vs loc
If you use this code on arbitrary input, Nick might be missing. In such case loc
will raise an error as the key is not found. reindex
will just create the missing indices.
CodePudding user response:
You can use iloc
:
order = [3, 0, 1, 2, 4, 5]
a.iloc[order, order]
Output:
B Nicky Boby John Mina Peter Teena
A
Nicky 24.0 NaN NaN NaN NaN NaN
Boby NaN 23.0 NaN NaN NaN NaN
John NaN NaN 27.0 NaN NaN NaN
Mina NaN NaN NaN 21.0 NaN NaN
Peter NaN NaN NaN NaN 23.0 NaN
Teena NaN NaN NaN NaN NaN 20.0