如何使用 Pandas 重采样功能按时间间隔从下到上分组?

How to group by time-interval from bottom to top using Pandas resample functionality?

我正在处理一些股票的历史数据。我想按特定时间间隔(如 1 小时、3 天等)对数据进行分组。 Pandas 提供了惊人的功能,使用 resampling 只需很少的努力即可完成此操作。但它发生在 top-to-bottom(下图)。 喜欢 -

With interval = 5m

Group 1 => 9:30 - 9:35
Group 2 => 9:35 - 9:40
Group 3 => 9:40 - 9:45

在这里,我想从bottom-to-top分组,比如-

With interval = 5m

Group 1 => 9:45 - 9:40
Group 2 => 9:40 - 9:35
Group 3 => 9:35 - 9:30

如何使用 pandas 重采样来做到这一点?如果还有其他方法可以做到这一点,请同时提及。谢谢:)

编辑: 我想要从上面的图像数据中得到类似的东西 -

5-min groups                     open    max_high     max_low       close   sum_volume
2022-05-05 09:45:00-04:00  162.750000  162.750000  162.529999  162.540100   338003
2022-05-05 09:40:00-04:00  163.000000  163.440002  163.000000  163.220001   419992 
2022-05-05 09:35:00-04:00  163.500000  163.535004  163.500000  163.535004   366042
2022-05-05 09:30:00-04:00  163.850006  163.989899  163.509995  163.649994  2720494

也许你可以在重采样后使用iloc反转?我不确定这是否会妨碍您的进一步计算,但它可以重新采样并反转集合。

因为我无法访问您的确切示例数据

我是这样测试的:

import yfinance as yf
import pandas as pd
import numpy as np

df = yf.download(tickers = 'BTC-USD',
                   start = '2022-05-16',
                   end = '2022-05-17',
                   interval = '1m',
                   group_by = 'ticker',
                   auto_adjust = True).reset_index()

df_1min = df.iloc[110:130,:] #sample timeframe extracted
df_1min.head()

这导致 1 分钟 df:

然后您可以应用 resampleiloc:

conversion = {'Open' : 'first', 
              'High' : 'max', 
              'Low' : 'min', 
              'Close' : 'last', 
              'Volume' : 'sum'}

df_1min = df_1min.set_index('Datetime') 

df_5min = df_1min.resample('5T').agg(conversion)

df_5min.iloc[::-1].reset_index() #reverse

这导致反向 df: