gpt4 book ai didi

python - 如果仅在数据框中的特定时间之间, Pandas 会合并股票数据

转载 作者:行者123 更新时间:2023-12-03 15:54:07 25 4
gpt4 key购买 nike

我有 2017 年到 2019 年的每分钟股票数据。
我只想保留每天 9:16 之后的数据
因此我想将 9:00 到 9:16 之间的任何数据转换为 9:16
IE:
09:16 的值应该是

  • open :从 9:00 - 9:16 的第一个数据的值,这里是 116.00
  • high : 9:00 - 9:16 的最高值,这里是 117.00
  • low :最低值从 9:00 - 9:16,这里是 116.00
  • close :这将是 9:16 的值,这里是 113.00
  •                        open    high     low   close
    date
    2017-01-02 09:08:00 116.00 116.00 116.00 116.00
    2017-01-02 09:16:00 116.10 117.80 117.00 113.00
    2017-01-02 09:17:00 115.50 116.20 115.50 116.20
    2017-01-02 09:18:00 116.05 116.35 116.00 116.00
    2017-01-02 09:19:00 116.00 116.00 115.60 115.75
    ... ... ... ... ...
    2029-12-29 15:56:00 259.35 259.35 259.35 259.35
    2019-12-29 15:57:00 260.00 260.00 260.00 260.00
    2019-12-29 15:58:00 260.00 260.00 259.35 259.35
    2019-12-29 15:59:00 260.00 260.00 260.00 260.00
    2019-12-29 16:36:00 259.35 259.35 259.35 259.35
    这是我尝试过的:
    #Get data from/to 9:00 - 9:16 and create only one data item

    convertPreTrade = df.between_time("09:00", "09:16") #09:00 - 09:16

    #combine modified value to original data

    df.loc[df.index.strftime("%H:%M") == "09:16" ,
    ["open","high","low","close"] ] = [convertPreTrade["open"][0],
    convertPreTrade["high"].max(),
    convertPreTrade["low"].min(),
    convertPreTrade['close'][-1] ]
    但这不会给我准确的数据

    最佳答案

    d = {'date': 'last', 'open': 'last',
    'high': 'max', 'low': 'min', 'close': 'last'}

    # df.index = pd.to_datetime(df.index)
    s1 = df.between_time('09:00:00', '09:16:00')
    s2 = s1.reset_index().groupby(s1.index.date).agg(d).set_index('date')

    df1 = pd.concat([df.drop(s1.index), s2]).sort_index()
    细节:
    使用 DataFrame.between_time 过滤数据框中的行 df介于时间之间 09:0009:16 :
    print(s1)
    open high low close
    date
    2017-01-02 09:08:00 116.0 116.0 116.0 116.0
    2017-01-02 09:16:00 116.1 117.8 117.0 113.0
    使用 DataFrame.groupby 将此过滤后的数据框分组 s1date并使用字典聚合 d :
    print(s2)
    open high low close
    date
    2017-01-02 09:16:00 116.1 117.8 116.0 113.0
    使用 DataFrame.drop 从原始数据框中删除行 df介于时间之间 09:00-09:16 ,然后使用 pd.concat s2 连接它,最后使用 DataFrame.sort_index 对索引进行排序:
    print(df1)
    open high low close
    date
    2017-01-02 09:16:00 116.10 117.80 116.00 113.00
    2017-01-02 09:17:00 115.50 116.20 115.50 116.20
    2017-01-02 09:18:00 116.05 116.35 116.00 116.00
    2017-01-02 09:19:00 116.00 116.00 115.60 115.75
    2019-12-29 15:57:00 260.00 260.00 260.00 260.00
    2019-12-29 15:58:00 260.00 260.00 259.35 259.35
    2019-12-29 15:59:00 260.00 260.00 260.00 260.00
    2019-12-29 16:36:00 259.35 259.35 259.35 259.35
    2029-12-29 15:56:00 259.35 259.35 259.35 259.35

    关于python - 如果仅在数据框中的特定时间之间, Pandas 会合并股票数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63656858/

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