2016-12-01 74 views
3

我試圖用一個滯後值來分開一個大熊貓DataFrame列,在本例中爲1。大熊貓用一個滯後值劃分一列

創建數據幀。這個例子只有1列,即使我的真實數據有幾十個

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

當我嘗試這個載體師(我是一個Python新手來自R推出):

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

我得到這個輸出:

的NaN 1 NaN的

但我期待:

1.0004327915052085 1.0013682367854484 0.9988446159101413

有清晰的東西,我不理解數據結構。我期待3個值,但它是輸出4.我錯過了什麼?

回答

1

您嘗試失敗,因爲索引的切片範圍僅在中間2行重疊。只使用/

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 

你可以看到,當分割這樣的指標是不同的:你應該用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 [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') 
+0

我不明白'/'的位。 'div'和'/'在指數方面表現完全一樣,不是嗎? – DSM

+0

@DSM我應該提到使用'shift'會改變指數以幫助對齊 – EdChum

+0

感謝您的快速回復。一個小問題是解決方案的順序是倒退的。我尋求的輸出是dTest ['Open']。shift(-1)/ dTest ['Open'] –