熊猫多指数选择范围在第一指数?

时间:2018-09-03 14:51:50

标签: python pandas

我有一个级别0和1的多级索引数据框。级别0是日期,而级别1是资产ID。

我只是试图根据0级索引选择数据帧的一部分。例如:

df [-10:]将根据级别0检索最近10个索引下的所有行。

我尝试了各种与此性质相似的事情:

master_df.loc[(-3, ), :] 

通常,我会遇到某种形式的关卡类型不匹配。级别0索引是日期时间,但是我已经对其进行了排序,并希望访问数字范围。我的切片应包含最近的X天,其中包含所有关联的资产和数据。

这是使用所有第二个索引和所有列获取最近的10个尝试的另一个失败尝试。由于“无法使用这些int类的索引器对DatetimeIndex类进行切片索引而失败”

idx = pd.IndexSlice
master_df.loc[idx[-10:,:], :]

感谢任何提示!

1 个答案:

答案 0 :(得分:0)

已解决

您可以对索引进行排序,然后以数组的形式获取值并将其切片,然后将其放入.loc切片器中。下面是一个工作示例:

def get_slice(slicer, df):
    vals = df.index.levels[0][-slicer:]
    return df.loc[pd.IndexSlice[vals,:], :].copy()

这将按n切下第一个索引(从末尾开始),从而为您提供数组中的具体值,然后您可以将其输入到.loc中,它将采用值数组。