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
Awesome !! Vielen Dank! Weißt du, wo ich mehr über diese Art der Formatierung erfahren könnte? – Diego
https://pyformat.info/ – Zero
Das ist so gut !! Danke noch einmal !! – Diego