使用n-d numpy数组对索引进行熊猫数据帧的分层索引

问题描述

我需要将参数数据从csv文件读取到DataFrame中进行统计分析。我想使用分层索引。我有10组参数,总共有70种变化。 excel表示形式的样本剪切:

Sample Excel representation

我尝试使用n-d nparray来构建df,以避免手动定义元组,但是在使用数组,from_product,合并每个参数的多个数据框之间迷失了。

params = np.array([[['Baseline'],['orig']],[['Threshold'],['Thresh-2','Thresh+2','Thresh_marg','Thresh_cort']],[['Marker'],['MHx-2','MHx+2','MHz-2','MHz+2','MTx-2','MTx+2','MTz-2','MTz+2','MSx-2','MSx+2','MSz-2','MSz+2']]])

rows = []
df = []
paramLen = 0
paramdf = pd.DataFrame()
for i in range(len(params)):
    paramLen += len(params[i][1])
    rows.append(pd.MultiIndex.from_product(params[i]))
    df.append(pd.DataFrame(np.zeros(len(params[i][1])),index = rows[i]))
    paramdf = pd.concat([paramdf,df[i]])

有没有一种方法可以直接使用n-d数组进行索引?

解决方法

目标序列不是多索引结构,据我所知,没有办法直接对其进行扩展。我使用您的方法将索引存储在两个列表中,并在最后创建了一个多索引。我没有以令人信服的方式回答这个问题,但我已经回答了另一种方式供您参考。

import itertools
idx1 = []
idx2 = []
for i in params:
    d = pd.MultiIndex.from_product(i)
    idx1.append(d.get_level_values(0).tolist())
    idx2.append(d.get_level_values(1).tolist())
idx1 = list(itertools.chain.from_iterable(idx1))
idx2 = list(itertools.chain.from_iterable(idx2))

df = pd.MultiIndex.from_arrays([idx1,idx2],names=('Parameter','Value'))
df
MultiIndex([( 'Baseline','orig'),('Threshold','Thresh-2'),'Thresh+2'),'Thresh_marg'),'Thresh_cort'),(   'Marker','MHx-2'),'MHx+2'),'MHz-2'),'MHz+2'),'MTx-2'),'MTx+2'),'MTz-2'),'MTz+2'),'MSx-2'),'MSx+2'),'MSz-2'),'MSz+2')],names=['Parameter','Value'])