通过遍历数组值列表来创建新的数据框

时间:2020-10-07 14:35:26

标签: pandas list dataframe multidimensional-array

我想遍历一个大列表,其中每个列表索引都是时间序列中的一个时间点。对于列表的每一行,都有一个二维数组,其中包含10个用户ID(0-9)的开始值和结束值,每个值都相同。

然后,我想创建一个新的数据帧,以使我具有行索引(针对每个时间),然后为10个用户ID中的每个用户创建一列,以使它们具有自己的时间序列。我花了很长时间才弄清楚这种数据类型,但这是可复制的示例版本:

list1 = np.transpose(np.array([[1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.0],[1.2,2.3,3.4,4.6,5.5,6.6,7.1,8.2,9.0,10.7]]))
list2 = np.transpose(np.array([[1.4,2.6,3.4,4.9,6.5,5.6,8.7,1.8,4.9,10.8],[1.4,2.4,3.5,4.7,6.5,5.6,7.5,8.4,9.3,10.2]]))
list3 = np.transpose(np.array([[4.1,5.2,5.5,6.1,6.5,5.9,7.7,8.8,9.9,10.0],[1.1,2.2,3.3,4.8,5.5,5.7,7.7,8.6,9.0,10.0]]))

list_of_arrays = [list1,list2,list3]

输出如下:

    start1 end1 start2 end2 start3 end3 ... (etc) ... start10  end10
0    1.1   1.2   2.2   2.3   3.3    3.4 ...            10.0    10.7
1    1.4   1.4   2.6   2.4   3.4    3.5 ...            10.8    10.2
2    4.1   1.1   5.2   2.2   5.5    3.3 ...            10.0    10.0
... (large n rows)

2 个答案:

答案 0 :(得分:1)

看起来像一个简单的reshape

pd.DataFrame([arr.reshape(-1) for arr in list_of_arrays])

    0    1    2    3    4    5    6   ...   13   14   15   16   17    18    19
0  1.1  1.2  2.2  2.3  3.3  3.4  4.4  ...  7.1  8.8  8.2  9.9  9.0  10.0  10.7
1  1.4  1.4  2.6  2.4  3.4  3.5  4.9  ...  7.5  1.8  8.4  4.9  9.3  10.8  10.2
2  4.1  1.1  5.2  2.2  5.5  3.3  6.1  ...  7.7  8.8  8.6  9.9  9.0  10.0  10.0

然后,您可以根据需要添加列名称。

答案 1 :(得分:1)

带有ravel的另一个选项:

pd.DataFrame([l.ravel() for l in list_of_arrays])