如何将现有列置于层次结构下?
How to place existing columns under a hierarchy?
我从 excel 导入的数据已与 Pandas 中的时间戳列建立了多重索引。我想将剩余的列放入它们各自的层次结构组中。频段列(7列:delta', 'theta', 'alpha', 'beta', 'high beta', 'gamma') 在标记为 'EMG' 的层次结构列和 'Biofeedback' 下的生物学措施(2 列:'Heart Rate Variabilty' 和 'GSR') 下。
有直接的方法吗?
第二部分是,如何在不展平第一部分中创建的层次结构的情况下将单级数据框附加到此多索引层次数据框?
您可以创建 MultiIndex.from_arrays
and then 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)
我从 excel 导入的数据已与 Pandas 中的时间戳列建立了多重索引。我想将剩余的列放入它们各自的层次结构组中。频段列(7列:delta', 'theta', 'alpha', 'beta', 'high beta', 'gamma') 在标记为 'EMG' 的层次结构列和 'Biofeedback' 下的生物学措施(2 列:'Heart Rate Variabilty' 和 'GSR') 下。
有直接的方法吗?
第二部分是,如何在不展平第一部分中创建的层次结构的情况下将单级数据框附加到此多索引层次数据框?
您可以创建 MultiIndex.from_arrays
and then 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)