pandas将列除以滞后值

时间:2016-12-01 15:44:02

标签: python pandas

我试图将Pandas DataFrame列除以滞后值,在此示例中为1。

创建数据框。这个例子只有1列,即使我的真实数据有几十个

dTest = pd.DataFrame(data={'Open': [0.99355, 0.99398, 0.99534, 0.99419]})

当我尝试这个矢量分割时(我是来自R的Python新手):

dTest.ix[range(1,4),'Open'] / dTest.ix[range(0,3),'Open']

我得到了这个输出:

  

NaN 11 NaN

但我期待:

  

1.0004327915052085   1.0013682367854484   0.9988446159101413

显然,我对数据结构一无所知。我期待3个值,但它输出4.我缺少什么?

1 个答案:

答案 0 :(得分:1)

您尝试失败的原因是索引的切片范围仅在中间2行重叠。您应该使用shift来移动行以达到您想要的效果:

In [166]:
dTest['Open'] / dTest['Open'].shift()

Out[166]:
0         NaN
1    1.000433
2    1.001368
3    0.998845
Name: Open, dtype: float64

您也可以使用div

In [159]:
dTest['Open'].div(dTest['Open'].shift(), axis=0)

Out[159]:
0         NaN
1    1.000433
2    1.001368
3    0.998845
Name: Open, dtype: float64

您可以看到切片时索引不同,因此在使用/时只会影响公共索引:

In [164]:
dTest.ix[range(0,3),'Open']

Out[164]:
0    0.99355
1    0.99398
2    0.99534
Name: Open, dtype: float64

In [165]:
dTest.ix[range(1,4),'Open']

Out[165]:
1    0.99398
2    0.99534
3    0.99419
Name: Open, dtype: float64

这里:

In [168]: 

dTest.ix[range(0,3),'Open'].index.intersection(dTest.ix[range(1,4),'Open'].index

Out[168]:
Int64Index([1, 2], dtype='int64')