我试图将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.我缺少什么?
答案 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')