pandas重采样函数打印中间蜡烛。

问题描述 投票:2回答:1

当我们需要将分钟数据转换为日数据时,我们使用以下代码

df.resample('D').apply({'low': lambda s: s.min(),'high': lambda s: s.max(),'volume': lambda s: s.sum()}).dropna() 

它给了我一个每天的蜡烛,每一天。现在,我正在寻找什么,而不是给我一个蜡烛,它给我所有的蜡烛(每日蜡烛)的那一天与中间状态。

比方说,一天从9:30开始,16:00收盘,那么第一个日线蜡烛将有9:30分钟蜡烛的开高收低,在9:31开盘将是9:30收盘将是9:31,高,低将被比较并相应地更新。

这我需要市场重播功能,所以用户可以看到谁每天的蜡烛是得到改变,在一天的数据开始到来。

任何帮助将是非常感激的。

python pandas finance
1个回答
0
投票

我第一次误解了你的问题,现在为你提供一个新的答案。

首先让我们得到一些数据。

import yfinance as yf

ticker = "msft"
df = yf.download(ticker, period="4d", interval="1m",)
df = df.loc[:, ["Open", "High", "Low", "Close", "Volume"]]

让我们创建一个新的数据框,叫做df1,用来存放你的结果。由于这是最后一条数据,所以每条的收盘线都是一样的,所以我们将从这一条开始。

df1 = pd.DataFrame()
df1["Close"] = df["Close"]

如果我们按日期分组,那么开盘线将始终是该日期的第一个值。

df1["Open"] = df.groupby(pd.Grouper(level=0, freq="D"))["Open"].transform("first")

到目前为止,我们有。

                            Close    Open
Datetime                                 
2020-06-10 09:30:00-04:00 191.260 191.125
2020-06-10 09:31:00-04:00 191.260 191.125
2020-06-10 09:33:00-04:00 191.405 191.125
2020-06-10 09:34:00-04:00 191.490 191.125
2020-06-10 09:35:00-04:00 191.510 191.125
...                           ...     ...
2020-06-15 15:55:00-04:00 188.690 184.580
2020-06-15 15:56:00-04:00 188.700 184.580
2020-06-15 15:57:00-04:00 188.610 184.580
2020-06-15 15:58:00-04:00 188.470 184.580
2020-06-15 15:59:00-04:00 189.170 184.580

最低值和最高值是用扩大计算的。

df1["Low"] = (
    df.groupby(pd.Grouper(level=0, freq="D"))["Low"].expanding().min().droplevel(0)
)

df1["High"] = (
    df.groupby(pd.Grouper(level=0, freq="D"))["High"].expanding().max().droplevel(0)
)

最后,可以使用cumsum over groupby date计算量。

df1["Volume"] = df.groupby(pd.Grouper(level=0, freq="D"))["Volume"].cumsum()

你的最终数据框架看起来是这样的。

print(df1[["Open", "High", "Low", "Close", "Volume"]])
                             Open    High     Low   Close    Volume
Datetime                                                           
2020-06-10 09:30:00-04:00 191.125 191.390 191.010 191.260    965121
2020-06-10 09:31:00-04:00 191.125 191.450 191.010 191.260   1112327
2020-06-10 09:33:00-04:00 191.125 191.590 191.010 191.405   1433916
2020-06-10 09:34:00-04:00 191.125 191.590 191.010 191.490   1566392
2020-06-10 09:35:00-04:00 191.125 191.800 191.010 191.510   1759454
...                           ...     ...     ...     ...       ...
2020-06-15 15:55:00-04:00 184.580 190.820 184.010 188.690  26253657
2020-06-15 15:56:00-04:00 184.580 190.820 184.010 188.700  26477100
2020-06-15 15:57:00-04:00 184.580 190.820 184.010 188.610  26738140
2020-06-15 15:58:00-04:00 184.580 190.820 184.010 188.470  27120167
2020-06-15 15:59:00-04:00 184.580 190.820 184.010 189.170  27933060

[1421 rows x 5 columns]

© www.soinside.com 2019 - 2024. All rights reserved.