簡體   English   中英

Pandas:在給定“重疊”區域的情況下對齊兩個時間序列?

[英]Pandas: align two time series given an “overlapping” region?

我有兩個時間序列,A 和 B。時間序列有不同的長度、不同的日期和不同的頻率。

核心問題是我想找到重疊的兩個時間序列之間的日期。

這很容易做到,但有一個轉折點。

想象時間序列 A 的值是 2020 年 1 月 1 日,而序列 B 的值是 2020 年 2 月 1 日。 這些只相隔一天,除非有更好的候選人(例如,如果 B ALSO 的值是 01/01/02020),我只想包括這個。

所以,真正的轉折是由一個“滯后”組成的,比如 5 天。 然后我想做的是以下內容:

  1. 考慮時間序列 A 中的所有日期。
  2. 對於每個這樣的日期,在時間序列 B 中找到相應的日期。
  3. 對於在 B 中未找到匹配項的每個日期,設置延遲 = 1 天,然后再次在 B 中搜索。
  4. 重復第 3 步,延遲 = 2、3、...、5 天。
  5. 返回一個新的時間序列 C,它由 A 的日期和 B 的值組成,使用上述過程匹配找到。

您可以通過在步驟 2 中使用簡單的min找到 B 中最近的日期來實現此目的

from random import random as r
import random
random.seed(123456)

ts_a = pd.Series([pd.Timestamp(f"{d+1}-jan-2021") for d in range(5)])

base = pd.Timestamp(f"01-jan-2021")
one_day = pd.Timedelta("1D")
ts_b = pd.Series([base + int(10*r())*one_day for _ in range(5)])

print(ts_a)
print(ts_b)

for t in ts_a:
    deltas = abs(ts_b - t)
    index_closest = deltas.idxmin()
    print(f"The closest day to {t} in ts_b is {ts_b.iloc[index_closest]}")
0   2021-01-01
1   2021-01-02
2   2021-01-03
3   2021-01-04
4   2021-01-05
dtype: datetime64[ns]
0   2021-01-09
1   2021-01-08
2   2021-01-01
3   2021-01-02
4   2021-01-01
dtype: datetime64[ns]
The closest day to 2021-01-01 00:00:00 in ts_b is 2021-01-01 00:00:00
The closest day to 2021-01-02 00:00:00 in ts_b is 2021-01-02 00:00:00
The closest day to 2021-01-03 00:00:00 in ts_b is 2021-01-02 00:00:00
The closest day to 2021-01-04 00:00:00 in ts_b is 2021-01-02 00:00:00
The closest day to 2021-01-05 00:00:00 in ts_b is 2021-01-08 00:00:00

暫無
暫無

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

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