python - pandas 如何优雅地平滑股票数据?
问题描述
我想平滑股票数据。忽略开盘当天的价格跳空,使整个时段的价格曲线平滑
让我举个例子:
[5]: df = pd.DataFrame([['20190101',2], ['20190101', 3], ['20190102',5], ['20190102', 4], ['20190103', 3], ['20190103', 2]], columns=['date', 'pric
...: e'])
In [6]: df
Out[6]:
date price
0 20190101 2
1 20190101 3
2 20190102 5
3 20190102 4
4 20190103 3
5 20190103 2
上面是一个股票价格数据框,我想要的是忽略开盘期间的价格差距。
这意味着 20190101 (3) 中的最后一个和 20190102(5) 中的第一个之间的价格差异,3-5 = -2 是我想忽略的。
我的忽略方法是减去今天和昨天之间的差异,这意味着预期的数据应该是:
[8]: df
Out[8]:
date price
0 20190101 3
1 20190101 3
2 20190102 3
3 20190102 2
4 20190103 2
5 20190103 1
20190102中的数据是原始数据(5, 4) - 2(今天和昨天的差),所以是3, 2
有什么好的方法可以做到这一点吗?
解决方案
尝试这个:
#df = pd.DataFrame({'date':[20190101,20190101,20190102,20190102,20190103,20190103],'price':[2,3,5,4,3,2]})
df2 = pd.concat([df,df.shift()],axis=1)
df2.columns = ['date','price','date_1','price_1']
df2 = df2[df2.date!=df2.date_1]
df2 = df2.price-df2.price_1
df['adjustedprice'] = df.price.sub(df2,fill_value=0).astype(int)
第一个注释行是数据框本身,如果需要,请取消注释。
我们在这里所做的是创建一个辅助数据框df2
,具有一天的偏移量。通过这个单日偏移,我们可以计算日差并检测日变化。我们都做了。首先,我们只过滤了当天的第一个事件(用df2 = df2[df2.date!=df2.date_1]
,然后我们用 取差值df2.price-df2.price_1
,然后我们将已经过滤的那些值仅针对当天的第一个价格减去原始值。
推荐阅读
- javascript - 用于生成简码的线性同余生成器有哪些替代方案?
- c# - .Net Core C# 中的 HttpClient 批量并行请求问题
- javascript - 使用 Vue 进行购物模式
- r - R:函数有 3 个目标,但控制对象假设为 1
- graph - 图卷积网络。训练精度保持在相同的值,而损失没有下降
- kubernetes-ingress - Treafik 直接在 Loadbalancer 上公开服务端口
- replication - How does newly elected leader apply entries in raft?
- c - 如何检查mmap从磁盘读取的字节数
- c# - 在身份验证失败时返回自定义状态码 .Net Core
- android - 带 Hilt 的动态功能模块