python 2.7 - Flatten 3 level MultiIndex Pandas dataframe -


i have following pandas df:

window         5                                                           15                                                          30                                                          45                                                   feature      col0                col1                col2                col0                col1                col2                col0                col1                col2                col0                col1                col2           metric       mean       std      mean       std      mean       std      mean       std      mean       std      mean       std      mean       std      mean       std      mean       std      mean       std      mean       std      mean       std 0             nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan 1             nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan 2             nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan 3             nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan 4       -0.878791  1.453479 -0.265591  0.712361  0.532332  0.894304       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan 5       -0.748535  1.459479 -0.023874  1.250110  0.913094  1.134599       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan       nan 

it has 3 levels flatten to:

col0_5_mean  col0_5_std  col0_15_mean  col0_15_std  col0_30_mean  col0_30_std  col0_45_mean col0_45_std  col1_5_mean  col1_5_std... 

so order should feature_window_metric.

the df generated by:

import numpy np import pandas pd np.random.seed(123)   # def add_mean_std_cols3(df): df = pd.dataframe(np.random.randn(100,3)).add_prefix('col')  windows = [5, 15, 30, 45] stats = ['mean', 'std'] cols = pd.multiindex.from_product([windows, df.columns, stats],                                    names=['window', 'feature', 'metric'])  df2 = pd.dataframe(np.empty((df.shape[0], len(cols))), columns=cols,                    index=df.index)  window in windows:     df2.loc[:, window] = df.rolling(window=window).agg(stats).values  print df2 

so far tried following solution among others:

from pandas dataframe multiindex column - merge levels

df2.columns = df2.columns.map('|'.join)  typeerror: sequence item 0: expected string, long found 

i appreciate suggestions,

thanks

use

in [1914]: df2.columns = ['{1}_{0}_{2}'.format(*c) c in df2.columns]  in [1915]: df2.columns out[1915]: index([u'col0_5_mean', u'col0_5_std', u'col1_5_mean', u'col1_5_std',        u'col2_5_mean', u'col2_5_std', u'col0_15_mean', u'col0_15_std',        u'col1_15_mean', u'col1_15_std', u'col2_15_mean', u'col2_15_std',        u'col0_30_mean', u'col0_30_std', u'col1_30_mean', u'col1_30_std',        u'col2_30_mean', u'col2_30_std', u'col0_45_mean', u'col0_45_std',        u'col1_45_mean', u'col1_45_std', u'col2_45_mean', u'col2_45_std'],       dtype='object')  in [1916]: df2.head(2) out[1916]:    col0_5_mean  col0_5_std  col1_5_mean  col1_5_std  col2_5_mean  col2_5_std  \ 0          nan         nan          nan         nan          nan         nan 1          nan         nan          nan         nan          nan         nan     col0_15_mean  col0_15_std  col1_15_mean  col1_15_std     ...       \ 0           nan          nan           nan          nan     ... 1           nan          nan           nan          nan     ...     col1_30_mean  col1_30_std  col2_30_mean  col2_30_std  col0_45_mean  \ 0           nan          nan           nan          nan           nan 1           nan          nan           nan          nan           nan     col0_45_std  col1_45_mean  col1_45_std  col2_45_mean  col2_45_std 0          nan           nan          nan           nan          nan 1          nan           nan          nan           nan          nan  [2 rows x 24 columns] 

Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -