如何使用 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:
然后您可以应用 resample
和 iloc
:
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:
我正在处理一些股票的历史数据。我想按特定时间间隔(如 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:
然后您可以应用 resample
和 iloc
:
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: