我正试图用一个滞后值来划分Pandas数据帧列,在本例中是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']
我得到这个输出:
南11南
但我希望:
一点零零零四三二七九一五零五二零八五
1.0013682367854484号
0.998844615910143
很明显,我对数据结构有些不理解。我期望3个值,但它输出4。我错过了什么?
最佳答案
您尝试的操作失败,因为索引的切片范围只在中间两行重叠。您应该使用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')