Python 2.7 展平3级多索引数据帧

Python 2.7 展平3级多索引数据帧,python-2.7,pandas,Python 2.7,Pandas,我有以下建议: Window 5 15 30 45

我有以下建议:

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
它有3个级别,我想将其扁平化为:

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...
所以顺序应该是特征\窗口\度量

df由以下内容生成:

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
到目前为止,我尝试了以下解决方案:

我感谢你的建议

谢谢使用

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]
使用


您仍然可以将
map
格式一起使用:

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

您仍然可以将
map
格式一起使用:

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

令人惊叹的非常感谢!你知道我在哪里可以学到更多关于这种格式化的知识吗?太棒了!!非常感谢!你知道我在哪里可以学到更多关于这种格式化的知识吗?@Diego Index(5 | col1 1 |; 5 5 |冷却冷却液0 0 0 0 0 0|;; 4 |冷却液1 | std 12400 0 0 0 0 0 0 0 0 0 0 0 5 |冷却液0 0 0 0 0 0 0 0 0 0 0 |;意思意思意思意思表示、5 12445 |冷却液1 1 |;性性性性病、5 5 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 12400 0 0 0 0 0 0 0 5 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \124;;;;;;;;冷却冷却液1 1 1 1 1 1 1 \|;;;;;性性性1 |平均值,'30 | col1 |标准,'30 | col2 |平均数,'30 | col2 |标准','45 | col0 |平均数','45 | col0 |标准','45 | col1 |平均数','45 | col2 |标准','dtype='object')@Diego Index(5 | col1 1 |; 5 5 |冷却冷却液0 0 0 0 0 0|;; 4 |冷却液1 | std 12400 0 0 0 0 0 0 0 0 0 0 0 5 |冷却液0 0 0 0 0 0 0 0 0 0 0 |;意思意思意思意思表示、5 12445 |冷却液1 1 |;性性性性病、5 5 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 12400 0 0 0 0 0 0 0 5 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \124;;;;;;;;冷却冷却液1 1 1 1 1 1 1 \|;;;;;性性性1 |平均值,'30 | col1 |标准,'30 | col2 |平均值,'30 | col2 |标准','45 | col0 |平均值','45 | col0 |标准','45 | col1 |平均值','45 | col2 |标准','dtype='object')