首页 > 解决方案 > 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

有什么好的方法可以做到这一点吗?

标签: pythonpandas

解决方案


尝试这个:

#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,然后我们将已经过滤的那些值仅针对当天的第一个价格减去原始值。


推荐阅读