【问题标题】:Pandas grouper date_time as per the market hours (Indian Stock Exchange)Pandas grouper date_time 根据市场时间(印度证券交易所)
【发布时间】:2021-10-28 01:36:04
【问题描述】:

以下数据是在5分钟的间隔内

数据框名称为 df:

script_id date_time open high low close volume
0 201 2019-02-04 14:55:00 1408.05 1408.05 1407 1408 2384
1 201 2019-02-04 15:00:00 1408 1410.6 1407.2 1408.85 12621
2 201 2019-02-04 15:05:00 1408.85 1410.45 1407.05 1407.05 3880
3 201 2019-02-04 15:10:00 1407.05 1409.4 1404.85 1404.85 12992
4 201 2019-02-04 15:15:00 1404.85 1408.7 1403.5 1404.25 30803
5 201 2019-02-04 15:20:00 1404.25 1405 1402.7 1404.8 14624
6 201 2019-02-04 15:25:00 1404.8 1405 1402.05 1403.8 8407
7 201 2019-02-05 09:15:00 1400 1416.05 1400 1410.75 17473

尝试通过执行以下代码在 10 分钟内对其进行分组:

df_f = df.groupby(['script_id', pd.Grouper(key='date_time', freq='10T', origin='start')])\
                        .agg(open=pd.NamedAgg(column='open', aggfunc='first'),
                            high=pd.NamedAgg(column='high', aggfunc='max'),
                            low=pd.NamedAgg(column='low', aggfunc='min'),
                            close=pd.NamedAgg(column='close', aggfunc='last'),
                            volume=pd.NamedAgg(column='volume', aggfunc='sum'))\
                            .reset_index()
            print(df_f)

结果:

预期结果:- 0,1,2 符合预期,下面应该是 3,不应该是 4。

script_id date_time open high low close volume
3 201 2019-02-04 15:25:00 1404.8 (value of 6) 1416.05 (highest among 6 & 7) 400 (lowest among 6 & 7) 1410.75 (value of 7) 25880 (sum of 6 & 7)

我们如何将最后两个 5min tf 合并为一个 10min tf?

注意:- 两天之间也有可能有假期间隔

【问题讨论】:

  • 这不是我通常看到的分析区间财务数据的方式。但各有各的!您希望如何组合 15:2509:15 行?什么时间应该代表他们的组合?
  • @CodeDifferent 因为这里的数据将合并 10 分钟 TF,这意味着我们必须将两个合并为 1,如果 15:2509:15 行将合并,那么 open 将是 @ 987654332@ 和09:15 的关闭。此外,就像在第二张图片中一样,最后一个数据应该是 9:15,但采用/假定 9:10 并作为空白(所有列都是 09:15
  • 将 15:25 和 09:15 组合成一个 10 分钟的间隔似乎很违反直觉。看起来您的预期分组机制与 pd.Grouper 应该做的不同。也许你可以澄清你想看到的确切输出。
  • @zyxue 已经添加了预期的结果,希望更清楚。

标签: python pandas dataframe pandas-groupby


【解决方案1】:

也许:

a = {'script_id': 'first', 'date_time': 'first', 'open': 'first', 'high':'max', 'low':'min', 'close':'last', 'volume':'sum'}

print(df.groupby(df.index // 2).agg(a))

   script_id            date_time     open     high      low    close  volume
0        201  2019-02-04 14:55:00  1408.05  1410.60  1407.00  1408.85   15005
1        201  2019-02-04 15:05:00  1408.85  1410.45  1404.85  1404.85   16872
2        201  2019-02-04 15:15:00  1404.85  1408.70  1402.70  1404.80   45427
3        201  2019-02-04 15:25:00  1404.80  1416.05  1400.00  1410.75   25880

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2022-06-17
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多