簡體   English   中英

使用非均勻毫秒級日內數據同步和重采樣兩個時間序列

[英]Synchronizing and Resampling two timeseries with non-uniform millisecond intraday data

我在 python 文檔中看到重新采樣和同步兩個時間序列的能力。 我的問題更難,因為時間序列中沒有時間規律。 我閱讀了三個具有非確定性日內時間戳的時間序列。 但是,為了對這兩個時間序列進行大多數分析(協方差、相關性等),我需要它們的長度相同。

在 Matlab 中,給定三個具有非確定性日內時間戳的時間序列ts1, ts2, ts3 ,我可以通過說來同步它們

[ts1, ts2] = synchronize(ts1, ts2, 'union');
[ts1, ts3] = synchronize(ts1, ts3, 'union');
[ts2, ts3] = synchronize(ts2, ts3, 'union');

請注意,時間序列已被讀入 Pandas DataFrame,因此我需要能夠與已創建的 DataFrame 同步(和重新采樣?)。

根據您鏈接到的 Matlab 文檔,聽起來您想要

使用時間向量對時間序列對象重新采樣,該時間向量是ts1ts2在兩個時間向量重疊的時間范圍內的時間向量的並集。

所以首先你需要找到你的數據幀索引的聯合:

newindex = df1.index.union(df2.index)

然后你可以使用這個索引重新創建你的數據幀:

df1 = df1.reindex(newindex)
df2 = df2.reindex(newindex)

請注意,它們的所有新條目中都將包含NaN (大概這與 Matlab 中的行為相同),是否要填充這些取決於您,例如fillna(method='pad')將填充 null值使用最后一個已知值,或者您可以使用interpolate(method='time')使用基於時間戳的線性插值。

也可以mergesynchronize數據幀。 特別是我們可能希望將 2 個數據幀與 2 個不同的數據字段同步以保留而不是 1 個。例如,假設我們有這 3 個數據幀與溫度和濕度值要同步:

df1

    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

   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

   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

我們可以做這樣的事情

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

    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

    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

第一個我們有 2 個不同的數據字段temperaturehumidity ,第二個我們有 2 個不同版本的temperature 這可能是您正在努力實現的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM