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