簡體   English   中英

熊貓在高頻數據框中每小時/分鍾找到最后一行

[英]Pandas find last row for each hour / minute in high frequency dataframe

假設一個數據框如下。 我正在尋找向 df 數據框添加一列,該列采用當前行的價格,並從當前小時/分鍾前 5 分鍾的最后一個索引的價格中減去它。 我試圖引用 minute_df 並讀取當前小時/分鍾並從 minute_df 中提取收盤價,但沒有找到可行的解決方案。 df 索引是 datetime64。

例如,在 06:27:12,它應該采用此行價格減去 06:22 的最后一個指數的收盤價,因為這是 06:27 之前的 5 分鍾。 06:27分鍾內的每一個指數,都應該參考這個收盤價計算,直到06:28分,再減去06:23的最后一個指數。

去向

TimeStamp                           Price   Q  hour min
2022-10-05 05:30:11.344618-05:00    8636    1   5   30
2022-10-05 05:30:12.647597-05:00    8637    1   5   30
2022-10-05 05:30:20.080559-05:00    8637    1   5   30
2022-10-05 05:30:21.267389-05:00    8637    2   5   30
2022-10-05 05:30:21.267952-05:00    8636    1   5   30

minute_df

TimeStamp                   open    high    low     close
2022-10-05 05:30:00-05:00   8636    8645    8635    8645
2022-10-05 05:31:00-05:00   8645    8647    8637    8638
2022-10-05 05:32:00-05:00   8639    8650    8639    8649
2022-10-05 05:33:00-05:00   8648    8652    8648    8649

預期輸出是 df 數據框中的一列,包含當前價格的值 - 收盤價,或當前分鍾前 5 分鍾的最后一個指數的價格。 NaN 值直到有足夠的行來回顧這么多時期。

df['price_change']

不確定我是否理解正確,但這是我的嘗試

如果TimeStamp是一列

# Remove the seconds and microseconds
floor_ts = df.TimeStamp.dt.floor("min")

# Get last 5 minute timestamp
last_index_5_ts = floor_ts - pd.Timedelta(5, unit="min")

# Create dict from minute_df TimeStamp to close price
ts_to_close_dict = dict(zip(minute_df.TimeStamp, minute_df.close))

close_price_v = last_index_5_ts.map(ts_to_close_dict)
df["price_change"] = df.Price - close_price_v
df

相同的代碼,但如果TimeStamp是一個索引

floor_ts = df.index.floor("min")
last_index_5_ts = floor_ts - pd.Timedelta(5, unit="min")
ts_to_close_dict = dict(zip(minute_df.index, minute_df.close))

close_price_v = last_index_5_ts.map(ts_to_close_dict)
df["price_change"] = df.Price - close_price_v
df

幾點注意事項:

  • 我不確定你處理NaN值是什么意思,但如果你需要向前填充/向后填充它們,你可以使用pd.fillna
  • 上面的一些pandas函數(比如floor )在舊的 pandas 版本中可能會丟失

編輯:我沒有注意到df已經有hourminute列。 您可以使用它來計算floor_ts (雖然不確定它是否更容易/更快)

暫無
暫無

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

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