我正试图用一个滞后值来划分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')

08-20 02:53