熊猫石斑鱼根据市场时间date_time(印度证券交易所)

Pandas grouper date_time as per the market hours (Indian Stock Exchange)

提问人:Kabomi 提问时间:8/28/2021 最后编辑:Kabomi 更新时间:8/30/2021 访问量:314

问:

以下数据以 5 分钟的间隔

数据帧名称为 df:

script_id date_time 打开 关闭
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)

结果:

result

预期结果:- 0,1,2 正如预期的那样,下面应该是 3,不应该是 4。

script_id date_time 打开 关闭
3 201 2019-02-04 15:25:00 1404.8(值 6) 1416.05 (6 和 7 中最高) 400(6 和 7 中最低) 1410.75(值 7) 25880(6 和 7 的总和)

我们如何将最后两个 5 分钟的 tf 合并到一个 10 分钟的 tf?

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

enter image description here

熊猫 数据帧 熊猫群比

评论

0赞 Code Different 8/29/2021
这不是我通常看到的区间财务数据分析方式。但对每个人来说!您希望如何组合 和 行?什么时间应该代表他们的组合?15:2509:15
0赞 Kabomi 8/29/2021
@CodeDifferent 在这里,数据将被组合 10 分钟的 TF,这意味着我们必须将两个组合为 1,如果 和 行将被合并,那么 open 将是 和 close of 。此外,就像在第二张图片中一样,最后一个数据应该是 for but taken / assume in place 并且是空白的(所有列都是 09:1515:2509:1515:2509:159:159:10)
0赞 zyxue 8/29/2021
将 15:25 和 09:15 合并为一个 10 分钟的间隔似乎有悖常理。看起来您预期的分组机制与应该执行的分组机制不同。也许你可以澄清你想看到的确切输出。pd.Grouper
0赞 Kabomi 8/29/2021
@zyxue 添加了预期的结果,希望有更清晰的结果。

答:

0赞 MDR 8/30/2021 #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