2016-10-04 67 views
0

我有兩個數據幀。一個有股票交易(例如買入日期,買入價格,賣出日期,賣出價格)。另一個數據框具有日期順序的所有價格,層次索引爲['symbol', 'date']索引'close'價格爲dfPrice使用層級索引切片數據幀

不知道提交數據幀到該組的一個更好的辦法,我已經通過了前10行的記錄:

ra = dfPrice.to_records() 

產生的ra的:

rec.array([('A', Timestamp('2000-09-01 00:00:00'), 39.84), 
('A', Timestamp('2000-09-05 00:00:00'), 39.8), 
('A', Timestamp('2000-09-06 00:00:00'), 38.63), 
('A', Timestamp('2000-09-07 00:00:00'), 39.84), 
('A', Timestamp('2000-09-08 00:00:00'), 38.15), 
('A', Timestamp('2000-09-11 00:00:00'), 36.54), 
('A', Timestamp('2000-09-12 00:00:00'), 35.41), 
('A', Timestamp('2000-09-13 00:00:00'), 35.41), 
('A', Timestamp('2000-09-14 00:00:00'), 35.89), 
('A', Timestamp('2000-09-15 00:00:00'), 36.7)], 
     dtype=[('symbol', 'S1'), ('date', 'O'), ('close', '<f8')]) 

可以通過:

dfPrice = DataFrame(ra) 
dfPrice.set_index(['symbol', 'date'], inplace=True) 

我想要的是用bu y日期和賣出日期,並在我持有股票的時間間隔內查找最低價格。

如果我在2000-09-07購買了股票'A'並在2000-09-14出售(保持週末沒有任何價格條目),我想我可以通過使用某些東西獲得最低價格如:

minPrice = dfPrice.min['A', '2000-09-07':'2000-09-14'] 

答案是35.41。

我看過堆棧溢出,但空了。我可以用什麼來獲得我想要的東西?

+0

我編輯了你的問題。請努力將您的文本資本化:從長遠來看,您會發現它會使您的問題受到很大的好處。 –

回答

0

可能有這樣做的更直接的方式,但我設法得到advanced indexing使用一個元組工作爲您分級指數:

>>> dfPrice[('A','2000-09-07'):('A','2000-09-14')] 
        close 
symbol date    
'A' 2000-09-07 39.84 
     2000-09-08 38.15 
     2000-09-11 36.54 
     2000-09-12 35.41 
     2000-09-13 35.41 
     2000-09-14 35.89 
>>> dfPrice[('A','2000-09-07'):('A','2000-09-14')].min() 
close 35.41 
dtype: float64 

因此,對於一個你必須使用先進的索引以切入第二級索引,並且您必須將.min()方法應用於切片數據框(而不是嘗試將索引放入對.min()的調用中)。

+0

我試圖用大數據框(超過2,000,000行)得到一個錯誤消息:KeyError:'密鑰長度(2)大於MultiIndex lexsort深度(0)',我不明白爲什麼 - 任何幫助? – jeff97005

+0

我試圖用大數據框(超過2,000,000行)得到了一條錯誤消息:KeyError:'密鑰長度(2)大於MultiIndex lexsort depth(0)'。試驗我發現它適用於100行,不適用於1,000行。是否有解決大型數據框的問題? – jeff97005

+0

@ jeff97005如果它適用於較小的情況,那麼您的大號可能會出現問題。你確定大數據框有正確的層次結構嗎?你能比較小型和大型案例的'dfPrice.index'嗎?我的意思是看'dfPrice.index.names','dfPrice.index.levels'等 –