gpt4 book ai didi

Python pandas "filter"仅交易日的时间序列

转载 作者:行者123 更新时间:2023-12-01 04:57:07 25 4
gpt4 key购买 nike

我有两个数据集,如下所示:

enter image description here

我想做的是过滤掉“数据”数据框中的非交易日。我假设它将每行的 data.index.date 与 Trading_days 的 data.index.date 进行比较,然后如果存在匹配则返回该行。如果没有匹配,则这不是交易日,并且不返回该行。这有效地过滤掉了非交易日的数据集。

但是,使用 apply() 函数返回行逐行检查两个 data.index.date 是否相等似乎效率低下 - 我觉得有一种更有效的方法来做到这一点,因为我将在 180M 行数据帧上执行此操作。

是否有某种“合并”或“加入”,例如:

data.join(trading_days) 

这将仅过滤 date.index.date 匹配的日期?我需要按分钟级别获取所有信息(如“数据”数据框中所示),但只需过滤掉非交易日期。感谢您的帮助!

更新以包含值(请告诉我是否有更好的方法来粘贴这些值):

In[5]: data.head(30).values
Out[6]:
array([[ 438.9, 438.9, 438.9, 438.9, 0. ],
[ 438.9, 438.9, 438.7, 438.7, 31. ],
[ 438.6, 438.6, 438.6, 438.6, 7. ],
[ 438.4, 438.7, 438.4, 438.4, 4. ],
[ 438.4, 438.4, 438.3, 438.3, 4. ],
[ 438.2, 438.2, 438.2, 438.2, 1. ],
[ 438.2, 438.2, 438.2, 438.2, 0. ],
[ 438.2, 438.2, 438.2, 438.2, 1. ],
[ 438.2, 438.2, 438.2, 438.2, 0. ],
[ 438.1, 438.1, 438.1, 438.1, 3. ],
[ 438. , 438. , 437.9, 438. , 6. ],
[ 438. , 438.2, 438. , 438. , 8. ],
[ 438.2, 438.2, 438.1, 438.1, 6. ],
[ 438.1, 438.1, 438.1, 438.1, 4. ],
[ 438.1, 438.1, 438.1, 438.1, 0. ],
[ 438.3, 438.3, 438.3, 438.3, 1. ],
[ 438.3, 438.3, 438.3, 438.3, 0. ],
[ 438.3, 438.3, 438.3, 438.3, 0. ],
[ 438.1, 438.1, 438.1, 438.1, 1. ],
[ 438. , 438. , 437.9, 437.9, 54. ],
[ 437.8, 437.8, 437.8, 437.8, 10. ],
[ 437.8, 437.8, 437.8, 437.8, 1. ],
[ 437.8, 437.8, 437.8, 437.8, 6. ],
[ 437.8, 437.8, 437.8, 437.8, 0. ],
[ 437.9, 438. , 437.9, 438. , 12. ],
[ 437.9, 438. , 437.9, 438. , 0. ],
[ 437.9, 438. , 437.9, 438. , 0. ],
[ 437.9, 438. , 437.9, 438. , 0. ],
[ 437.9, 437.9, 437.9, 437.9, 1. ],
[ 437.9, 437.9, 437.8, 437.8, 4. ]])

这是时间戳:

In[10]: data.head(30).index.values
Out[11]:
array(['2005-01-02T13:59:00.000000000-0500',
'2005-01-02T14:00:00.000000000-0500',
'2005-01-02T14:01:00.000000000-0500',
'2005-01-02T14:02:00.000000000-0500',
'2005-01-02T14:03:00.000000000-0500',
'2005-01-02T14:04:00.000000000-0500',
'2005-01-02T14:05:00.000000000-0500',
'2005-01-02T14:06:00.000000000-0500',
'2005-01-02T14:07:00.000000000-0500',
'2005-01-02T14:08:00.000000000-0500',
'2005-01-02T14:09:00.000000000-0500',
'2005-01-02T14:10:00.000000000-0500',
'2005-01-02T14:11:00.000000000-0500',
'2005-01-02T14:12:00.000000000-0500',
'2005-01-02T14:13:00.000000000-0500',
'2005-01-02T14:14:00.000000000-0500',
'2005-01-02T14:15:00.000000000-0500',
'2005-01-02T14:16:00.000000000-0500',
'2005-01-02T14:17:00.000000000-0500',
'2005-01-02T14:18:00.000000000-0500',
'2005-01-02T14:19:00.000000000-0500',
'2005-01-02T14:20:00.000000000-0500',
'2005-01-02T14:21:00.000000000-0500',
'2005-01-02T14:22:00.000000000-0500',
'2005-01-02T14:23:00.000000000-0500',
'2005-01-02T14:24:00.000000000-0500',
'2005-01-02T14:25:00.000000000-0500',
'2005-01-02T14:26:00.000000000-0500',
'2005-01-02T14:27:00.000000000-0500',
'2005-01-02T14:28:00.000000000-0500'], dtype='datetime64[ns]')

交易日是从这里读取的.csv:http://pastebin.com/5N01Gi5V

第二次更新:

enter image description here

最佳答案

您可以通过以下方式加入:

  1. data 添加一个 days 列,其中包含索引的日期。
  2. pd.merge(days, data, on='days')

默认情况下,这会执行内部联接,因此只有 data 中的行(其天数出现在 days 框架中)才会出现在结果中。

关于Python pandas "filter"仅交易日的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27138198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com