How can I reorder multi-indexed dataframe columns at a specific level
There is a very simple way: just create a new dataframe based on the original, with the correct order of multiindex columns:
multi_tuples = [('IWWGCW',24), ('IWWGCW',48), ('IWWGDW',24), ('IWWGDW',48)
, ('BASE',24), ('BASE',48)]
multi_cols = pd.MultiIndex.from_tuples(multi_tuples, names=['Experiment', 'Lead Time'])
df_ordered_multi_cols = pd.DataFrame(df_ori, columns=multi_cols)
This is the simplest one that worked for me:
for your selected level, create a list with columns in desired order;
reindex your columns and create a MultiIndex object from that list, keep in mind this returns a tuple;
use the MultiIndex object to reorder your DataFrame.
cols = ['IWWGCW', 'IWWGDW', 'BASE']
new_cols = df.columns.reindex(cols, level=0)
df.reindex(columns=new_cols[0]) #new_cols is a single item tuple
In one line:
df.reindex(columns=df.columns.reindex(['IWWGCW', 'IWWGDW', 'BASE'], level=0)[0])
voilá