我的pandas版本是0.18,我有一个分钟数据,如下所示:
Time
2009-01-30 09:30:00 85.11 100.11
2009-01-30 09:39:00 84.93 100.05
2009-01-30 09:40:00 84.90 100.00
2009-01-30 09:45:00 84.91 99.94
2009-01-30 09:48:00 84.81 99.90
2009-01-30 09:55:00 84.78 100.00
2009-01-30 09:56:00 84.57 100.10
2009-01-30 09:59:00 84.25 100.41
2009-01-30 10:00:00 84.32 100.60
2009-01-30 10:06:00 84.23 101.49
2009-01-30 10:09:00 84.15 101.47
我只想使用9:30到16:00的数据,并以78分钟的间隔对数据进行重新采样(即将9:30到16:00之间的时间分为5等份)。我的代码如下所示:
Data= Data.between_time('9:30','16:00')
tframe = '78T'
hourlym = Data.resample(tframe, base=30).mean()
输出:
Time
2009-01-30 08:18:00 85.110000 100.110000
2009-01-30 09:36:00 83.950645 101.984516
2009-01-30 10:54:00 83.372294 103.093824
2009-01-30 12:12:00 83.698624 102.566897
2009-01-30 13:30:00 83.224397 103.076667
2009-01-30 14:48:00 82.641167 104.114667
2009-01-30 16:06:00 NaN NaN
2009-01-30 17:24:00 NaN NaN
2009-01-30 18:42:00 NaN NaN
正如你所看到的,pandas忽略了我的基本参数,我的输出表从8:18开始,我相信这是因为pandas寻求如何正确地将我的整个数据分为78分钟,因为你不能将24小时平均分为78分钟,所以发生了这种奇怪的行为。是否可以强制pandas从第一天的9:30开始重新采样?或者只在特定的时间重新采样?
2条答案
按热度按时间nhaq1z211#
base
参数应用于午夜,因此在您的示例中,采样从00:30开始,并从那里增加78分钟的增量。选项1:
计算应用于午夜的
base
应该是多少,以便到达9:30(在本例中为24
):选项二:
自己生成datetimeindex,并使用
reindex
重新采样:EDIT:对于多天,您需要自己生成时间戳。
下面是代码的作用:
apply
属性的序列。unstack
并对时间戳进行排序(最后重置索引以摆脱沿着生成的无用索引)。生成的
index
可用于重新索引,如最初的选项2所示:iqjalb3h2#
IanS给出的答案相当完整。
正如我注意到你的问题中的日期,我认为你是在印度交易场景中尝试这些操作.所以,它会更好,如果你创建您的自定义日历使用
pd.tseries.offsets.CustomBusinessDay(holidays=holiday_list)
:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html?highlight=holiday#custom-business-days假设从1980年到2025年(仅适用于B日())+删除(1980年到2025年的交易假期列表(您可以在谷歌上搜索)。
这将帮助你,如果你正在做纸交易回测和进口数据从许多股票。
或者您可以安装package:
pip install pandas_market_calendars
之后就做吧