pandas 日内数据按日期定位
pandas loc by dates on intraday data
我有一个盘中数据框(索引是 DatetimeIndex)。我想在日内 df 定位的日子(它也是 DatetimeIndex,因此它像日期一样表示,但它是 YYYY-MM-DD hh:mm:ss 和 hh:mm:ss = 00:00:00)。
例如:
intraday_df =
Column
Date
2005-01-03 09:30:00 0.9962
2005-01-03 09:31:00 0.9963
2005-01-03 09:32:00 0.9939
2005-01-03 09:33:00 0.9937
2005-01-03 09:34:00 0.9905
... ...
2021-09-16 15:56:00 148.7800
2021-09-16 15:57:00 148.7250
2021-09-16 15:58:00 148.7400
2021-09-16 15:59:00 148.8500
2021-09-16 16:00:00 148.7900
days = DatetimeIndex(['2005-03-09', '2005-03-24', '2005-03-31', '2005-04-14',
'2005-04-18', '2005-04-22', '2005-05-24', '2005-05-25',
'2005-06-06', '2005-06-10',
...
'2020-09-10', '2020-09-15', '2020-09-18', '2020-09-28',
'2020-10-12', '2020-10-14', '2020-12-22', '2021-01-11',
'2021-01-28', '2021-05-07'],
dtype='datetime64[ns]', length=200, freq=None)
我想到了这样的事情
intraday_df[pd.Series(intraday_df.index.date, index=intraday_df.index).isin(days.index.date)]
但是没有我看到的那么好。我想做这样的事情:
intraday_df[intraday_df.index.to_series().agg(date).isin(days.index.date)]
但我不知道如何聚合(或应用)日期方法...
或者有更好的吗?
您可以简化现有的解决方案
intraday_df[intraday_df.index.floor().isin(days)]
也试试这个:
intraday_df[pd.Series(intraday_df.index.date).isin(days)]
使用 DatetimeIndex.floor
or DatetimeIndex.normalize
删除次数,输出为 datetimes
,因此可能匹配 days
:
intraday_df[intraday_df.index.floor('d').isin(days)]
intraday_df[intraday_df.index.normalize().isin(days)]
将 bath 转换为日期
intraday_df[intraday_df.index.date.isin(days.date)]
我有一个盘中数据框(索引是 DatetimeIndex)。我想在日内 df 定位的日子(它也是 DatetimeIndex,因此它像日期一样表示,但它是 YYYY-MM-DD hh:mm:ss 和 hh:mm:ss = 00:00:00)。
例如:
intraday_df =
Column
Date
2005-01-03 09:30:00 0.9962
2005-01-03 09:31:00 0.9963
2005-01-03 09:32:00 0.9939
2005-01-03 09:33:00 0.9937
2005-01-03 09:34:00 0.9905
... ...
2021-09-16 15:56:00 148.7800
2021-09-16 15:57:00 148.7250
2021-09-16 15:58:00 148.7400
2021-09-16 15:59:00 148.8500
2021-09-16 16:00:00 148.7900
days = DatetimeIndex(['2005-03-09', '2005-03-24', '2005-03-31', '2005-04-14',
'2005-04-18', '2005-04-22', '2005-05-24', '2005-05-25',
'2005-06-06', '2005-06-10',
...
'2020-09-10', '2020-09-15', '2020-09-18', '2020-09-28',
'2020-10-12', '2020-10-14', '2020-12-22', '2021-01-11',
'2021-01-28', '2021-05-07'],
dtype='datetime64[ns]', length=200, freq=None)
我想到了这样的事情
intraday_df[pd.Series(intraday_df.index.date, index=intraday_df.index).isin(days.index.date)]
但是没有我看到的那么好。我想做这样的事情:
intraday_df[intraday_df.index.to_series().agg(date).isin(days.index.date)]
但我不知道如何聚合(或应用)日期方法...
或者有更好的吗?
您可以简化现有的解决方案
intraday_df[intraday_df.index.floor().isin(days)]
也试试这个:
intraday_df[pd.Series(intraday_df.index.date).isin(days)]
使用 DatetimeIndex.floor
or DatetimeIndex.normalize
删除次数,输出为 datetimes
,因此可能匹配 days
:
intraday_df[intraday_df.index.floor('d').isin(days)]
intraday_df[intraday_df.index.normalize().isin(days)]
将 bath 转换为日期
intraday_df[intraday_df.index.date.isin(days.date)]