首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用非均匀毫秒数据同步和重采样两个时态序列

用非均匀毫秒数据同步和重采样两个时态序列
EN

Stack Overflow用户
提问于 2015-11-23 21:27:42
回答 2查看 7.8K关注 0票数 9

我在python中看到了重采样和同步两个timeseries的能力。我的问题更难,因为时间序列中没有时间规律。我读了三个时刻表,它们都有不确定的日内时间戳。但是,为了对这两个时间序列进行大多数分析(协方差、相关性等),我需要它们具有相同的长度。

在Matlab中,给出了具有非确定性的日内时间戳的三个时间序列ts1, ts2, ts3,我可以这样说来表示同步性

代码语言:javascript
运行
复制
[ts1, ts2] = synchronize(ts1, ts2, 'union');
[ts1, ts3] = synchronize(ts1, ts3, 'union');
[ts2, ts3] = synchronize(ts2, ts3, 'union');

请注意,时间序列已经读取到熊猫DataFrame,所以我需要能够同步(和重采样?)已经创建的DataFrames。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-23 22:15:11

根据您链接到的Matlab文档,听起来您想要

使用时间向量重采样timeseries对象,该时间向量是ts1ts2的时间向量在两个时间向量重叠的时间范围内的合并。

因此,首先您需要找到数据的索引的联合:

代码语言:javascript
运行
复制
newindex = df1.index.union(df2.index)

然后可以使用以下索引重新创建数据文件:

代码语言:javascript
运行
复制
df1 = df1.reindex(newindex)
df2 = df2.reindex(newindex)

请注意,它们的所有新条目都将包含NaNs (想必这与Matlab中的行为相同),如果您想要填充这些条目,则由您决定,例如,fillna(method='pad')将使用最后一个已知值填充空值,或者您可以使用interpolate(method='time')根据时间戳使用线性插值。

票数 7
EN

Stack Overflow用户

发布于 2021-06-02 22:54:46

为了实现merge数据格式,还可以使用synchronize。特别是,我们可能希望用两个不同的数据字段来同步两个数据文件,而不是一个。例如,假设我们有这三个温湿度值要同步的数据:

df1

代码语言:javascript
运行
复制
    company_id            log_date  temperature
0            4 2020-02-29 00:00:00         24.0
1            4 2020-02-29 00:03:00         24.0
2            4 2020-02-29 00:06:00         23.9
3            4 2020-02-29 00:09:00         23.8
4            4 2020-02-29 00:12:00         23.8
5            4 2020-02-29 00:15:00         23.7
6            4 2020-02-29 00:18:00         23.6
7            4 2020-02-29 00:21:00         23.5
8            4 2020-02-29 00:24:00         23.4
9            4 2020-02-29 00:27:00         23.3
10           4 2020-02-29 00:30:00         24.0
11           4 2020-02-29 00:33:00         21.0
12           4 2020-02-29 00:36:00         22.9
13           4 2020-02-29 00:39:00         23.8
14           4 2020-02-29 00:42:00         22.8
15           4 2020-02-29 00:45:00         21.7
16           4 2020-02-29 00:48:00         22.6
17           4 2020-02-29 00:51:00         21.5

df2

代码语言:javascript
运行
复制
   company_id            log_date  humidity
0           4 2020-02-29 00:00:00     74.92
1           4 2020-02-29 00:05:00     75.00
2           4 2020-02-29 00:10:00     73.10
3           4 2020-02-29 00:15:00     72.10
4           4 2020-02-29 00:20:00     72.00
5           4 2020-02-29 00:25:00     73.00
6           4 2020-02-29 00:30:00     74.00
7           4 2020-02-29 00:35:00     72.10
8           4 2020-02-29 00:45:00     69.00
9           4 2020-02-29 00:50:00     71.92

df3

代码语言:javascript
运行
复制
   company_id            log_date  temperature
0           4 2020-02-29 00:00:00        20.00
1           4 2020-02-29 00:05:00        21.00
2           4 2020-02-29 00:10:00        22.00
3           4 2020-02-29 00:15:00        23.00
4           4 2020-02-29 00:20:00        23.10
5           4 2020-02-29 00:25:00        22.00
6           4 2020-02-29 00:30:00        22.00
7           4 2020-02-29 00:35:00        22.10
8           4 2020-02-29 00:45:00        23.00
9           4 2020-02-29 00:50:00        21.92

我们可以做这样的事

代码语言:javascript
运行
复制
df1['log_date'] = pd.to_datetime(df1['log_date'])
df2['log_date'] = pd.to_datetime(df2['log_date'])
df3['log_date'] = pd.to_datetime(df3['log_date'])

df_a = pd.merge_asof(df1, df2, on="log_date", by="company_id", tolerance=pd.Timedelta("5m"))
df_b = pd.merge_asof(df1, df3, on="log_date", by="company_id", tolerance=pd.Timedelta("5m"))

以及由此产生的数据;

df_a

代码语言:javascript
运行
复制
    company_id            log_date  temperature  humidity
0            4 2020-02-29 00:00:00         24.0     74.92
1            4 2020-02-29 00:03:00         24.0     74.92
2            4 2020-02-29 00:06:00         23.9     75.00
3            4 2020-02-29 00:09:00         23.8     75.00
4            4 2020-02-29 00:12:00         23.8     73.10
5            4 2020-02-29 00:15:00         23.7     72.10
6            4 2020-02-29 00:18:00         23.6     72.10
7            4 2020-02-29 00:21:00         23.5     72.00
8            4 2020-02-29 00:24:00         23.4     72.00
9            4 2020-02-29 00:27:00         23.3     73.00
10           4 2020-02-29 00:30:00         24.0     74.00
11           4 2020-02-29 00:33:00         21.0     74.00
12           4 2020-02-29 00:36:00         22.9     72.10
13           4 2020-02-29 00:39:00         23.8     72.10
14           4 2020-02-29 00:42:00         22.8       NaN
15           4 2020-02-29 00:45:00         21.7     69.00
16           4 2020-02-29 00:48:00         22.6     69.00
17           4 2020-02-29 00:51:00         21.5     71.92

df_b

代码语言:javascript
运行
复制
    company_id            log_date  temperature_x  temperature_y
0            4 2020-02-29 00:00:00           24.0          20.00
1            4 2020-02-29 00:03:00           24.0          20.00
2            4 2020-02-29 00:06:00           23.9          21.00
3            4 2020-02-29 00:09:00           23.8          21.00
4            4 2020-02-29 00:12:00           23.8          22.00
5            4 2020-02-29 00:15:00           23.7          23.00
6            4 2020-02-29 00:18:00           23.6          23.00
7            4 2020-02-29 00:21:00           23.5          23.10
8            4 2020-02-29 00:24:00           23.4          23.10
9            4 2020-02-29 00:27:00           23.3          22.00
10           4 2020-02-29 00:30:00           24.0          22.00
11           4 2020-02-29 00:33:00           21.0          22.00
12           4 2020-02-29 00:36:00           22.9          22.10
13           4 2020-02-29 00:39:00           23.8          22.10
14           4 2020-02-29 00:42:00           22.8            NaN
15           4 2020-02-29 00:45:00           21.7          23.00
16           4 2020-02-29 00:48:00           22.6          23.00
17           4 2020-02-29 00:51:00           21.5          21.92

在第一个版本中,我们有两个不同的数据字段temperature & humidity,在第二个字段中,我们有两个不同版本的temperature。这可能是你正在努力实现的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33881035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档