将多个不同长度的时间序列合并成一个二维矩阵

问题描述 投票:0回答:2

我有一个时间戳数组数组,其中每个时间戳数组的长度不同。例如,

[arr1, arr2, arr3....] 

arr1 = [0.24, 0.56, 0.77]
arr2 = [0.1, 0.24]
arr3 = [0.6, 0.7, 0.72, 0.88]

输出应如下所示:

NaN, 0.24, 0.56, Nan, Nan,  Nan, 0.77, Nan
0.1, 0.24,  Nan, Nan, Nan,  Nan,  Nan, Nan
Nan,  Nan,  Nan, 0.6, 0.7, 0.72,  NaN, Nan

如何继续将所有这些数组合并成一个二维矩阵?另一个注意事项是每个单独的数组

(arr1, arr2, ..)
的大小都非常大(数万)。

我感觉

pandas merge
功能可以使用,但我不知道如何进行。

python arrays pandas numpy time-series
2个回答
2
投票

这是使用 pandas 的方法:

arrs = [arr1,arr2,arr3]

# convert to series
series = [pd.Series(arr,index=arr) for arr in arrs]

# concat with reindex
pd.concat(series, axis=1)

输出:

         0     1     2
0.10   NaN  0.10   NaN
0.24  0.24  0.24   NaN
0.56  0.56   NaN   NaN
0.60   NaN   NaN  0.60
0.70   NaN   NaN  0.70
0.72   NaN   NaN  0.72
0.77  0.77   NaN   NaN
0.88   NaN   NaN  0.88

-1
投票
arr1 = [0.24, 0.56, 0.77]
arr2 = [0.1, 0.24]
arr3 = [0.6, 0.7, 0.72, 0.88]
list2=[arr1, arr2, arr3]
ss1=pd.Series(pd.DataFrame(list2).to_numpy().reshape(-1)).dropna().drop_duplicates().sort_values()
pd.Series(list2).apply(lambda x:ss1.where(lambda ss:ss.isin(x)))

   4     0     1    8    9     10    2     11
0  NaN  0.24  0.56  NaN  NaN   NaN  0.77   NaN
1  0.1  0.24   NaN  NaN  NaN   NaN   NaN   NaN
2  NaN   NaN   NaN  0.6  0.7  0.72   NaN  0.88
© www.soinside.com 2019 - 2024. All rights reserved.