合并两个熊猫中的时间序列并提取阈值时差内的观察值
作者:互联网
我在熊猫中有两个时间序列,它们在看似随机的时间都有观测.下面的代码将创建一些示例时间序列:
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_time,s1_value,s2_time,s2_value列的DataFrame,但是我对输出的确切格式并不感到困惑.
我已经尝试过使用pd.merge,尝试使用asof等方法来处理各种不同的方法,但是最终我完全使自己感到困惑.我敢肯定,这是一个以前已解决的问题,但我似乎在网上找不到与随机间隔时间序列有关的很多信息(很多情况取决于每小时还是每天).
在熊猫中做到这一点的最佳方法是什么?
解决方法:
您可以先将reindex
与method =’nearest’一起使用,然后如果s2中的值是唯一的,则使用以下值merge
:
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
编辑:
我在重新索引中发现了新的参数公差:
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
标签:pandas,time-series,python 来源: https://codeday.me/bug/20191118/2027926.html