如何将现有列放在层次结构下?

时间:2017-08-07 11:35:50

标签: python pandas data-structures hierarchy levels

我从excel导入的数据已使用Pandas中的时间戳列进行多索引编制。我想将其余列放入各自的层次组中。标有“EMG”和生物学的层次结构列下的频段列(7列:delta','theta','alpha','beta','high beta','gamma') 'Biofeedback'下的措施( 2栏:'心率变量'和'GSR')

有没有直接的方法来做到这一点?

第二部分是,如何在不展平第一部分中创建的层次结构的情况下将单层数据帧附加到此多索引分层数据帧?

1 个答案:

答案 0 :(得分:1)

您可以创建MultiIndex.from_arrays,然后reindex

cols = ['delta','theta','alpha','beta','Heart Rate Variabilty','high beta', 'gamma','GSR']
df = pd.DataFrame([[4,5,8,3,1,0,9,2]], columns=cols)    
print (df)
   delta  theta  alpha  beta  Heart Rate Variabilty  high beta  gamma  GSR
0      4      5      8     3                      1          0      9    2   

c1 = ['delta', 'theta', 'alpha', 'beta','high beta', 'gamma']
c2 = ['Heart Rate Variabilty', 'GSR']  


mux = pd.MultiIndex.from_arrays([ ['EMG'] * len(c1) + ['Biofeedback'] * len(c2),c1 + c2])
print (mux)
MultiIndex(levels=[['Biofeedback', 'EMG'], 
                   ['GSR', 'Heart Rate Variabilty', 'alpha', 'beta',
                    'delta', 'gamma', 'high beta', 'theta']],
           labels=[[1, 1, 1, 1, 1, 1, 0, 0], [4, 7, 2, 3, 6, 5, 1, 0]])

df = df.reindex(columns=mux, level=1)
print (df)
    EMG                                            Biofeedback    
  delta theta alpha beta high beta gamma Heart Rate Variabilty GSR
0     4     5     8    3         0     9                     1   2

通过评论编辑:

感谢最终解决方案OP:

df1.columns = pd.MultiIndex.from_tuples([(c, '', '') for c in df1])
df = pd.concat([df, df1], axis=1)