I make dataframe like this.
df = pd.DataFrame({ 'class' : ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], 'number' : [1,2,3,4,5,1,2,3,4,5], 'math' : [90, 20, 50, 30, 57, 67, 89, 79, 45, 23], 'english' : [40, 21, 68, 89, 90, 87, 89, 54, 21, 23] })
and i want to convert index to this by using some pandas methods.(ex. set_index, stack,,,)
df1 = pd.DataFrame(np.random.randint(1, 100, (5, 4)), columns = [['A', 'A', 'B', 'B'],['english', 'math', 'english', 'math']], index = [1, 2, 3, 4, 5])
how can i do this?
pandas MultiIndex to ColumnsUse pandas DataFrame. reset_index() function to convert/transfer MultiIndex (multi-level index) indexes to columns. The default setting for the parameter is drop=False which will keep the index values as columns and set the new index to DataFrame starting from zero.
Output: Now, the dataframe has Hierarchical Indexing or multi-indexing. To revert the index of the dataframe from multi-index to a single index using the Pandas inbuilt function reset_index(). Returns: (Data Frame or None) DataFrame with the new index or None if inplace=True.
I think you need set_index
with unstack
for reshaping, then swap levels in MultiIndex
in columns by swaplevel
and last sort columns by sort_index
:
df1 = df.set_index(['number','class']).unstack().swaplevel(0,1,1).sort_index(1) print (df1) class A B english math english math number 1 40 90 87 67 2 21 20 89 89 3 68 50 54 79 4 89 30 21 45 5 90 57 23 23
Another solution with stack
and unstack
:
print (df.set_index(['number','class']).stack().unstack([1,2])) class A B english math english math number 1 40 90 87 67 2 21 20 89 89 3 68 50 54 79 4 89 30 21 45 5 90 57 23 23
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With