使用Pandas / Python中的时间序列

时间:2016-09-30 18:35:22

标签: python pandas

我有以下数据:

            AdjClose     Chg     RM    Target
date                                       
2014-01-16  41.733862  0.002045   0     NaN
2014-01-17  41.695141 -0.000928   1     NaN
2014-01-21  42.144309  0.010773   1     NaN
2014-01-22  41.803561 -0.008085   1     NaN
2014-01-23  41.640931 -0.003890   0     3.0
2014-01-24  41.586721 -0.001302   0     3.0
2014-01-27  41.323416 -0.006331   0     2.0
2014-01-28  41.710630  0.009370   1     2.0
2014-01-29  41.780328  0.001671   0     1.0
2014-01-30  42.701896  0.022057   0     1.0

我确信有一种简单的方法可以做到这一点,但我还没弄明白。对于每一天,我需要查看过去n天内有多少次上升/下降或上下移动。

我丑陋的解决方案是为5天目标做以下事情:

dd['RM']=0
dd['RM'][((dd['Chg']>0) & (dd['Chg'].shift(1)<0))|
         ((dd['Chg']<0) & (dd['Chg'].shift(1)>0))] = 1
dd['Target']=pd.rolling_sum(dd['RM'],window=5)

然后在前n天做一个rolling_sum。

我希望得到一些更优雅的解决方案。谢谢。

1 个答案:

答案 0 :(得分:2)

我会像你一样完成rolling_sum(),但我认为当符号改变时,上/下和下/上很容易被测量为

dd['RM'] = np.int64(np.sign(dd['Chg']) != np.sign(dd['Chg'].shift(1)))
dd['RM'].values[0] = 0