将5D阵列转换为Pandas数据帧的最有效方法

时间:2017-02-24 16:22:46

标签: python loops pandas dataframe

我有一个称为预测变量的5D数组,其形状为[6,288,37,90,107],其中6是变量的数量,
288是这些变量的时间序列,
37是k个位置,
90是j个位置,
107是我的位置  我希望pandas dataframe包含每个k,j,i位置的每个变量时间序列的列,这样当然会有很多列。
然后我想以某种方式获取每列的名称 例如,第一列是var1_k_j_i = predictors[0,:,0,0,0]
除了名称我实际上想要k locationj location
i location代替k_j_i 既然有这么多我不能手工做到这一点所以我希望有关于将这个组织成熊猫数据框并获取名称的最佳方法的建议?可能是一个循环?

总而言之,在此结束时,我希望我的5D预测变量数组变成一个大型的pandas数据帧,其中每列是位于不同k,j,i位置的变量,其中包含变量和位置的相应名称数据框的标题或第一行。

1 个答案:

答案 0 :(得分:1)

声音就像你需要在这里重塑一样好玩。

为了解决位置i,j,k很容易使用重塑。然后我不确定你是否可以再次重塑以获得你需要的2D表示,所以我为你提出一个循环如下。

import itertools
import pandas as pd

dfs = []
new_matrix = matrix.reshape([6,288,37*90*107])
for var range(6):
   iterator = itertools.product(range(37), range(90), range(107))
   columns = ['var%i_' % var + '_'.join(map(str, x)) for x in iterator]
   dfs.append(pd.DataFrame(new_matrix[var]))

result = pd.concat(dfs)