展平 3 级 MultiIndex Pandas 数据框 [英] Flatten 3 level MultiIndex Pandas dataframe

查看:56
本文介绍了展平 3 级 MultiIndex 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

它有 3 个级别,我想将其展平:

It has 3 levels which I would like to 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...

所以顺序应该是 feature_window_metric.

So order should be feature_window_metric.

df 是通过以下方式生成的:

The df is generated by:

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

到目前为止,我尝试了以下解决方案:

So far I tried the following solution among others:

来自 具有多索引列的 Pandas 数据框 - 合并级别

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

TypeError: sequence item 0: expected string, long found

我很欣赏建议,

谢谢

推荐答案

使用

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]

这篇关于展平 3 级 MultiIndex Pandas 数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆