首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas重采样函数打印中间蜡笔

pandas重采样函数打印中间蜡笔
EN

Stack Overflow用户
提问于 2020-06-12 16:48:36
回答 1查看 195关注 0票数 2

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

代码语言:javascript
复制
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,高,低将被比较并相应地更新。

这是我需要的市场回放功能,以便用户可以看到谁每天的烛光是在一天中的数据开始得到变化。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 18:55:43

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

首先,让我们获取一些数据:

代码语言:javascript
复制
import yfinance as yf

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

让我们创建一个名为df1的新数据帧,它将保存您的结果。由于这是最后一段数据,因此每个条形图的结束线都是相同的,因此我们将从这条线开始。

代码语言:javascript
复制
df1 = pd.DataFrame()
df1["Close"] = df["Close"]

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

代码语言:javascript
复制
df1["Open"] = df.groupby(pd.Grouper(level=0, freq="D"))["Open"].transform("first")

到目前为止,我们有:

代码语言:javascript
复制
                            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

使用扩展来计算低值和高值。

代码语言:javascript
复制
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来计算体积。

代码语言:javascript
复制
df1["Volume"] = df.groupby(pd.Grouper(level=0, freq="D"))["Volume"].cumsum()

您的最终数据帧如下所示:

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62340772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档