У меня есть фрейм данных с индексом (year
, foo
), где я хотел бы, чтобы выбрать X крупнейшие наблюдения foo
где year == someYear
.мультииндексная нарезка требует индекса быть полностью lexsorted
Мой подход был
df.sort_index(level=[0, 1], ascending=[1, 0], inplace=True)
df.loc[pd.IndexSlice[2002, :10], :]
, но я получаю
KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'
Я пробовал различные варианты сортировки (например, ascending = [0, 0]
), но все они в результате какой-то ошибки.
Если мне нужен только номер xth
, я мог бы df.groupby(level=[0]).nth(x)
после сортировки, но так как я хочу набор строк, это не очень эффективно.
Каков наилучший способ выбора этих строк? Некоторые данные, чтобы играть с:
rank_int rank
year foo
2015 1.381845 2 320
1.234795 2 259
1.148488 199 2
0.866704 2 363
0.738022 2 319
Что происходит, если вы просто сортируете с помощью 'df.sort_index (inplace = True)'? – ASGM
@ASGM Это работает, но поскольку я не восхожу на то, я получу неправильную группу 'foo'. – FooBar