Python:通过非整数比例因子重新缩放熊猫中的时间序列

Posted

技术标签:

【中文标题】Python:通过非整数比例因子重新缩放熊猫中的时间序列【英文标题】:Python: Rescale time-series in pandas by non-integer scale-factor 【发布时间】:2016-01-06 18:42:24 【问题描述】:

我不知道这在 Pandas 中是否可行。我认为df.resample 可以完成这项工作,但没有。这是我的目标:

我在DataFramedf 中有一个时间序列,如下所示:

            return
12:30:00 -0.000202
12:30:01 -0.000257
12:30:02 -0.000230
12:30:03 -0.000229
12:30:04 -0.000253
...
12:59:49  0.001491
12:59:50  0.001523
12:59:51  0.001503
12:59:52  0.001484
12:59:53  0.001513
12:59:54  0.001523
12:59:55  0.001527
12:59:56  0.001545
12:59:57  0.001532
12:59:58  0.001535
12:59:59  0.001566
13:00:00  0.001605

剧情如下:

现在您可以看到时间从12:30:00 to 13:00:00 开始。我想重新缩放或拉伸这个时间序列以从12:30:00 to 14:15:00 获得观察结果。因此,我需要在我的原始时间序列中再添加 3.5 个条目......因此,对于我的时间序列中的每个观察,重复条目要多 3.5 倍。如果它只有 3 次,那么我会将我的数据转换为数组并使用np.reshape(),然后重新分配时间索引,但这在这种特殊情况下不起作用。有什么建议吗?

【问题讨论】:

您想重新采样,对非整数时间点进行插值。您将需要一些信号处理或统计插值库。您需要决定/试验您选择的插值函数。 是的,我明白你在插值中的意思。问题是我不知道如何采用分布在 30 分钟和 1 小时 45 分钟的时间序列,nan 在数字之间。那么之后使用插值就变得容易了。 【参考方案1】:

您可以将日期时间转换为 unix 纪元,乘以您的比例因子,然后再转换回来(使用 How to get unix timestamp from numpy.datetime64 进行纪元计算)

df['epoch'] = df.index.astype(np.int64) // 10 ** 9     
start_epoch = df.epoch.iloc[0]
df['epochdelta']= df['epoch'] - start_epoch
df['newindex'] = pd.to_datetime((df.epochdelta * 3.5 + start_epoch),unit='s') 

【讨论】:

很酷的建议!谢谢。明天我会在我回到办公室并回复你的时候尝试。 将epoch计算为“df['epoch'] = df.index.astype(np.int64)// 10 ** 9”要快很多 感谢@Miro 是的,这更好,我已经编辑了我的答案!

以上是关于Python:通过非整数比例因子重新缩放熊猫中的时间序列的主要内容,如果未能解决你的问题,请参考以下文章

IfcCartesianTransformationOperator3DnonUniform

更改 UIScrollView 中的比例因子

IfcCartesianTransformationOperator2DnonUniform

特征缩放以相同比例转换列中的不同值

熊猫数据框重新排列堆栈到两个值列(用于因子图)

求高手用MATLAB对图片进行缩放