2016-10-04 70 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'等 –