gpt4 book ai didi

python - 合并 Pandas 中的两个时间序列并在阈值时间差内提取观察值

转载 作者:太空狗 更新时间:2023-10-30 02:57:06 25 4
gpt4 key购买 nike

我在 pandas 中有两个时间序列,它们在看似随机的时间进行观察。下面的代码将创建一些示例时间序列:

import numpy as np
import pandas as pd

s1 = pd.Series(data=np.arange(5), index=['2014-05-06 09:15:34', '2014-05-06 09:34:00',
'2014-05-06 11:20:43', '2014-05-07 12:13:00',
'2014-05-07 17:29:19'])
s1.index = pd.DatetimeIndex(s1.index)

s2 = pd.Series(data=np.arange(6)*10, index=['2014-05-03 10:20:09', '2014-05-06 09:13:26',
'2014-05-06 09:23:38', '2014-05-06 11:09:52',
'2014-05-07 12:14:08', '2014-05-07 17:35:19'])
s2.index = pd.DatetimeIndex(s2.index)

给出s1:

2014-05-06 09:15:34    0
2014-05-06 09:34:00 1
2014-05-06 11:20:43 2
2014-05-07 12:13:00 3
2014-05-07 17:29:19 4
dtype: int64

s2:

2014-05-03 10:20:09     0
2014-05-06 09:13:26 10
2014-05-06 09:23:38 20
2014-05-06 11:09:52 30
2014-05-07 12:14:08 40
2014-05-07 17:35:19 50
dtype: int64

我想合并这些时间序列并提取每个时间序列中存在观测值的行彼此相隔 10 分钟以内。因此,使用上面的数据:

  • s2 的第一个元素与 s1 中的任何内容都不匹配。
  • s2 的第二个元素与 s1 的第一个元素相差大约 2 分钟,因此它们会匹配。
  • 等等...

理想情况下,我最终会得到一个包含 s1_times1_values2_time 列的 DataFrames2_value,但我并不关心输出的确切格式。

我已经尝试了很多不同的方法来解决这个问题,使用 pd.merge,尝试使用 asof 等等 - 但我最终把自己完全搞糊涂了.我敢肯定这是一个以前已经解决的问题,但我似乎无法在网上找到很多与随机间隔时间序列相关的内容(很多都是基于每小时或每天的事情)。

在 pandas 中执行此操作的最佳方法是什么?

最佳答案

可以先用reindex使用 method='nearest' 然后如果 s2 中的值是 uniquemerge通过这个值:

print (s2.reindex(s1.index, method='nearest'))
2014-05-06 09:15:34 10
2014-05-06 09:34:00 20
2014-05-06 11:20:43 30
2014-05-07 12:13:00 40
2014-05-07 17:29:19 50
dtype: int32

print (pd.DataFrame({'s1':s1, 's2':s2.reindex(s1.index, method='nearest'), 'index_s1': s1.index}))
index_s1 s1 s2
2014-05-06 09:15:34 2014-05-06 09:15:34 0 10
2014-05-06 09:34:00 2014-05-06 09:34:00 1 20
2014-05-06 11:20:43 2014-05-06 11:20:43 2 30
2014-05-07 12:13:00 2014-05-07 12:13:00 3 40
2014-05-07 17:29:19 2014-05-07 17:29:19 4 50

print (pd.merge(s2.reset_index().rename(columns={0:'s2'}),
pd.DataFrame({'s1':s1, 's2':s2.reindex(s1.index, method='nearest'), 'index_s1': s1.index}),
on='s2').rename(columns={'index':'index_s2'}))

index_s2 s2 index_s1 s1
0 2014-05-06 09:13:26 10 2014-05-06 09:15:34 0
1 2014-05-06 09:23:38 20 2014-05-06 09:34:00 1
2 2014-05-06 11:09:52 30 2014-05-06 11:20:43 2
3 2014-05-07 12:14:08 40 2014-05-07 12:13:00 3
4 2014-05-07 17:35:19 50 2014-05-07 17:29:19 4

编辑:

我在 reindex 中找到了新参数 tolerance:

print (s2.reindex(s1.index, method='nearest',tolerance='10Min'))
2014-05-06 09:15:34 10.0
2014-05-06 09:34:00 NaN
2014-05-06 11:20:43 NaN
2014-05-07 12:13:00 40.0
2014-05-07 17:29:19 50.0
dtype: float64

关于python - 合并 Pandas 中的两个时间序列并在阈值时间差内提取观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401166/

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