2017-09-11 1 views
1

Ich habe folgende Pandas df:Flatten 3-Ebene Multiindex Pandas Datenrahmen

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 

Es verfügt über 3 Ebenen, die ich glätten möchte: sollte

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 bestellen feature_window_metric sein.

Die df erzeugt durch:

import numpy as np 
import pandas as 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) 

for window in windows: 
    df2.loc[:, window] = df.rolling(window=window).agg(stats).values 

print df2 

Bisher habe ich versucht, die folgende Lösung unter anderem:

Von Pandas dataframe with multiindex column - merge levels

df2.columns = df2.columns.map('|'.join) 

TypeError: sequence item 0: expected string, long found 

ich Vorschläge schätzen,

Dank

Antwort

2

Verwenden

In [1914]: df2.columns = ['{1}_{0}_{2}'.format(*c) for 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] 
+0

Awesome !! Vielen Dank! Weißt du, wo ich mehr über diese Art der Formatierung erfahren könnte? – Diego

+0

https://pyformat.info/ – Zero

+0

Das ist so gut !! Danke noch einmal !! – Diego

2

Sie noch map mit format verwenden:

df2.columns = df2.columns.map('{0[0]} | {0[1]} | {0[2]}'.format) 
+0

Gut zu wissen, danke !! – Diego

+0

@Diego Index (['5 | col0 | mittel', '5 | col0 | std', '5 | col1 | mean', '5 | col1 | std', '5 | col2 | mean', '5 | col2 | std ', '15 | col0 | mean', '15 | col0 | std ', '15 | col1 | mean', '15 | col1 | std ', '15 | col2 | mean', '15 | col2 | std ', '30 | col0 | mean', '30 | col0 | std ', '30 | col1 | mean', '30 | col1 | std ', '30 | col2 | mean', '30 | col2 | std ', '45 | col0 | mean', '45 | col0 | std ', '45 | col1 | mean', '45 | col1 | std ', '45 | col2 | mean', '45 | col2 | std '], dtype =' Objekt ') –

Verwandte Themen