我有许多numpy数组,每个数组代表一系列季节性数据。频率是一年。
第一个数组具有一年中第一周的所有销售额, 从2014年到2018年。
第二个数组具有一年中第二个星期的所有销售额, 从2014年到2018年。
以下示例有些棘手,因为不能严格通过计算“一年中的一周”和滑动来获得它们。而是根据相对于时间开始的一周的相对索引的剩余部分52来选择它们。但是想法很相似...
它们看起来像这样。
arr1 = array([[Timestamp('2014-01-04 00:00:00'), 138.52],
[Timestamp('2015-01-03 00:00:00'), 25476.179999999997],
[Timestamp('2016-01-02 00:00:00'), 87318.65000000001],
[Timestamp('2016-12-31 00:00:00'), 194409.42],
[Timestamp('2017-12-30 00:00:00'), 299190.06000000023]], dtype=object)
arr2 = array([[Timestamp('2014-01-11 00:00:00'), 0.0],
[Timestamp('2015-01-10 00:00:00'), 23848.57000000001],
[Timestamp('2016-01-09 00:00:00'), 86814.12],
[Timestamp('2017-01-07 00:00:00'), 202016.92],
[Timestamp('2018-01-06 00:00:00'), 344430.36000000004]], dtype=object)
现在,我想将它们加入一个完整且经过排序的时间序列中。
[arr1.index[0], arr2.index[0], arr3.index[0], ... arr52.index[0], (here we begin a new year) arr1.index[1], arr2.index[1], ...]
。 [arr1.value[0], arr2.value[0], arr3.value[0], ... arr52.value[0], (here we begin a new year) arr1.value[1], arr2.value[1], ...]
。 我能想到的一种方法是先将所有子系列连接为完整的系列,然后按索引对系列进行排序。
但是有更好的方法吗?
谢谢!
背景 当我尝试在Python中实现stl分解时出现问题,第一步是独立平滑每个季节性子序列,然后将它们组合在一起。
答案 0 :(得分:0)
我有个主意。假设我们已经准备好所有子系列了。
因此,由于子系列的结构,我们避免了排序。
示例:
>> s1
array([Timestamp('2013-12-28 00:00:00'), Timestamp('2014-12-27 00:00:00'),
Timestamp('2015-12-26 00:00:00'), Timestamp('2016-12-24 00:00:00'),
Timestamp('2017-12-23 00:00:00')], dtype=object)
>> s2
array([Timestamp('2014-01-04 00:00:00'), Timestamp('2015-01-03 00:00:00'),
Timestamp('2016-01-02 00:00:00'), Timestamp('2016-12-31 00:00:00'),
Timestamp('2017-12-30 00:00:00')], dtype=object)
>> np.vstack([s1, s2]).T.reshape([1, -1], order = 'c')[0]
array([Timestamp('2013-12-28 00:00:00'), Timestamp('2014-01-04 00:00:00'),
Timestamp('2014-12-27 00:00:00'), Timestamp('2015-01-03 00:00:00'),
Timestamp('2015-12-26 00:00:00'), Timestamp('2016-01-02 00:00:00'),
Timestamp('2016-12-24 00:00:00'), Timestamp('2016-12-31 00:00:00'),
Timestamp('2017-12-23 00:00:00'), Timestamp('2017-12-30 00:00:00')], dtype=object)