Python:通过非整数比例因子重新缩放熊猫中的时间序列
Posted
技术标签:
【中文标题】Python:通过非整数比例因子重新缩放熊猫中的时间序列【英文标题】:Python: Rescale time-series in pandas by non-integer scale-factor 【发布时间】:2016-01-06 18:42:24 【问题描述】:我不知道这在 Pandas 中是否可行。我认为df.resample
可以完成这项工作,但没有。这是我的目标:
我在DataFrame
、df
中有一个时间序列,如下所示:
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