gpt4 book ai didi

python - 将一个时间序列的数据分布到另一个时间序列

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:15 25 4
gpt4 key购买 nike

这是一个使数据生成容易的人为示例,但总的来说,这应该是一个适用于广泛受众的问题。

我有一个像这样的时间序列测量:

In [1]: import pandas as pd

In [2]: index = pd.date_range(start="18:10",periods=20,freq='min')

In [3]: df = pd.DataFrame(randn(20,3),columns=list('abc'),index=index)

In [4]: df.head()
Out[4]:
a b c
2013-02-27 18:10:00 -1.344753 0.438351 1.561849
2013-02-27 18:11:00 1.715643 1.601984 -0.027408
2013-02-27 18:12:00 -0.142264 -0.049462 0.482493
2013-02-27 18:13:00 0.132617 0.737902 -0.347620
2013-02-27 18:14:00 1.277257 0.083401 0.649422

在“真实”测量之间,正在进行校准测量,但频率比测量低得多,例如像这样:

In [5]: calindex = pd.date_range("18:12:30",periods=4,freq='5min')

In [6]: caldata = pd.Series([10,20,30,40],index = calindex)

In [7]: caldata
Out[7]:
2013-02-27 18:12:30 10
2013-02-27 18:17:30 20
2013-02-27 18:22:30 30
2013-02-27 18:27:30 40
Freq: 5T

现在的总体思路是将这些校准数据应用于测量。为此,我想通过“最近时间”方法分发/广播校准数据,因此我想生成另一个名为“偏移量”的列,例如,它具有 that 校准值在时间上最接近每个测量值的时间的每一行测量值。

因此我想要这样的最终结果:

In [14]: df
Out[14]:
a b c offsets
2013-02-27 18:10:00 -1.344753 0.438351 1.561849 10
2013-02-27 18:11:00 1.715643 1.601984 -0.027408 10
2013-02-27 18:12:00 -0.142264 -0.049462 0.482493 10
2013-02-27 18:13:00 0.132617 0.737902 -0.347620 10
2013-02-27 18:14:00 1.277257 0.083401 0.649422 10
2013-02-27 18:15:00 0.048120 0.421220 0.149372 20
2013-02-27 18:16:00 0.812317 -1.517389 2.035487 20
2013-02-27 18:17:00 -0.058959 -0.034876 -1.535118 20
2013-02-27 18:18:00 -0.666227 0.040208 -1.042464 20
2013-02-27 18:19:00 -0.077031 -0.158351 -0.441992 20
2013-02-27 18:20:00 0.103083 -0.129341 0.294073 30
2013-02-27 18:21:00 0.900802 0.443271 -0.946229 30
2013-02-27 18:22:00 0.744631 -0.058666 -0.386226 30
2013-02-27 18:23:00 -0.064313 0.500321 -0.536237 30
2013-02-27 18:24:00 -0.392653 0.789827 0.000109 30
2013-02-27 18:25:00 1.926765 0.252259 -0.051475 40
2013-02-27 18:26:00 -0.035577 0.559222 -0.290751 40
2013-02-27 18:27:00 1.726165 0.626515 -0.868177 40
2013-02-27 18:28:00 1.269409 1.520980 -0.181637 40
2013-02-27 18:29:00 -1.151166 -0.300196 0.420747 40

通过 .map、.apply 等将值应用到其他列中。我相信理解得很好,这是显然需要的时间或偏移技巧,我需要为分配我没有的值而做从什么开始的线索。

是否应该使用 pandas.DateOffsets 对其进行攻击?是否有机器可以在某处最小化 Pandas 内部的时间增量?

我会很感激向正确的方向轻推,根本不必是完整的,只是我需要前进的方向。

最佳答案

我使用 numpy 函数来计算最近的时间位置:

from numpy.random import randn
import numpy as np
import pandas as pd

index = pd.date_range(start="18:10",periods=20,freq='min')
df = pd.DataFrame(randn(20,3),columns=list('abc'),index=index)
calindex = pd.date_range("18:12:30",periods=4,freq='5min')
caldata = pd.Series([10,20,30,40],index = calindex)

# if you use numpy 1.7
real_time = df.index.values
cali_time = caldata.index.values

# if you use numpy 1.6
real_time = np.array(df.index.values.view("i8") / 1000, dtype="datetime64[us]")
cali_time = np.array(caldata.index.values.view("i8") / 1000, dtype="datetime64[us]")

right_index = cali_time.searchsorted(real_time, side="left")
left_index = np.clip(right_index - 1, 0, len(caldata)-1)
right_index = np.clip(right_index, 0, len(caldata)-1)
left_time = cali_time[left_index]
right_time = cali_time[right_index]
left_diff = np.abs(left_time - real_time)
right_diff = np.abs(right_time - real_time)
caldata2 = caldata[np.where(left_diff < right_diff, left_time, right_time)]
df["offset"] = caldata2.values

关于python - 将一个时间序列的数据分布到另一个时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com