2013-01-24 221 views
4

我有一個DataFrame與每日OHLCV數據。大熊貓行間計算

s['Range'] = s['High'] - s['Low'] 

簡單:

我可以計算範圍。現在,我想計算出新的列,我已經叫s['OIR'](OIR =開在範圍內)

['OIR']列檢查,看看我們是否在範圍內打開,並且可以通過,如果我們上面昨天開通測試做到這一點低於和低於昨天的高點。我需要引用前面的行,我不太清楚如何去做。返回值將是True/False。

謝謝。


編輯:我是StackExchange和Python的新手。不確定在何處放棄樣本數據。這是數據框的圖像。

http://i47.tinypic.com/142eb2a.png


樣本數據:字典轉換成數據幀

{'High': {<Timestamp: 2007-03-02 00:00:00>: 1384.5, 
    <Timestamp: 2007-03-05 00:00:00>: 1373.0}, 
'Last': {<Timestamp: 2007-03-02 00:00:00>: 1365.0, 
    <Timestamp: 2007-03-05 00:00:00>: 1351.5}, 
'Low': {<Timestamp: 2007-03-02 00:00:00>: 1364.25, 
    <Timestamp: 2007-03-05 00:00:00>: 1350.5}, 
'OIR': {<Timestamp: 2007-03-02 00:00:00>: False, 
    <Timestamp: 2007-03-05 00:00:00>: False}, 
'Open': {<Timestamp: 2007-03-02 00:00:00>: 1378.5, 
    <Timestamp: 2007-03-05 00:00:00>: 1356.75}, 
'Range': {<Timestamp: 2007-03-02 00:00:00>: 20.25, 
<Timestamp: 2007-03-05 00:00:00>: 22.5}, 
'Volume': {<Timestamp: 2007-03-02 00:00:00>: 1706906, 
<Timestamp: 2007-03-05 00:00:00>: 1984041}} 

答:

s['OIR'] = ((s['Open'] < s['High'].shift(1)) & (s['Open'] > s['Low'].shift(1))) 
+0

你能提供一些示例數據 – diliop

+2

@aozkan:在未來,添加例如數據一個方便的方法是選擇它的一個小塊,然後使用'.to_dict() '做一些你可以編輯成你的問題的方法,其他人可以複製和粘貼以便輕鬆地創建一個'DataFrame'。 – DSM

+0

感謝帝斯曼會做。 – aozkan

回答

7

在你建議的方式引用先前的行是最好的accomplishe d與Series.shift()功能:

In [1]: df = DataFrame(randn(10,3),columns=['O','L','H']) 

In [2]: df 
Out[2]: 
      O   L   H 
0 0.605412 0.739866 -0.280222 
1 -0.707852 0.785651 0.855183 
2 -0.087119 0.518924 0.932167 
3 -0.913352 0.369825 1.277771 
4 0.434593 -2.942903 0.802413 
5 0.075669 -0.135914 1.374454 
6 1.112062 0.314946 0.882468 
7 -0.706078 -0.202243 0.838088 
8 -1.668152 0.414585 0.809932 
9 1.452937 -0.048245 0.635499 

In [3]: df['OIR'] = ((df.L.shift() <= df.O) & (df.O <= df.H.shift())) 

In [4]: df 
Out[4]: 
      O   L   H OIR 
0 0.605412 0.739866 -0.280222 False 
1 -0.707852 0.785651 0.855183 False 
2 -0.087119 0.518924 0.932167 False 
3 -0.913352 0.369825 1.277771 False 
4 0.434593 -2.942903 0.802413 True 
5 0.075669 -0.135914 1.374454 True 
6 1.112062 0.314946 0.882468 True 
7 -0.706078 -0.202243 0.838088 False 
8 -1.668152 0.414585 0.809932 False 
9 1.452937 -0.048245 0.635499 False 
+0

感謝澤爾和其他人的建議。這工作。 – aozkan