使用层次结构索引切片数据框

时间:2016-10-04 23:19:36

标签: python indexing dataframe slice hierarchy

我有两个数据帧。一个有股票交易(诸如买入日期,买入价格,卖出日期,卖出价格之类的东西)。另一个数据框的所有价格均按日期顺序排列,其层次结构索引为['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

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

我想要的是使用买入日期和卖出日期,并在我持有股票的区间内查找最低价格。

如果我买了股票&#39; A&#39;在2000-09-07并在2000-09-14卖出(保持在周末没有任何价格条目)我以为我可以通过使用类似的东西获得该间隔的最低价格:

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

答案是35.41。

我看过Stack Overflow,但是空了。我可以用什么来得到我想要的东西?

1 个答案:

答案 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())。