фильтровать панды данных на одном уровне многоуровневого индекса - PullRequest
0 голосов
/ 23 мая 2018

Если у меня есть фрейм данных pandas с многоуровневым индексом, как я могу фильтровать по одному из уровней этого индекса.Например:

df = pd.DataFrame({"id": [1,2,1,2], "time": [1, 1, 2, 2], "val": [1,2,3,4]})
df.set_index(keys=["id", "time"], inplace=True)

Я хотел бы сделать что-то вроде:

df[df["time"] > 1]

, но time больше не является столбцом.Я мог бы сохранить это как столбец, но я не хочу перетаскивать копии данных.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018
Решение
In [17]: df[df.index.get_level_values('time') > 1]
Out[17]:
         val
id time
1  2       3
2  2       4

@ piRSquared более идиоматично, хотя ...

0 голосов
/ 23 мая 2018

query

df.query('time > 1')

         val
id time     
1  2       3
2  2       4

IndexSlice

Индекс DataFrame должен быть лексортирован

df.sort_index().loc[pd.IndexSlice[:, 2:], :]

         val
id time     
1  2       3
2  2       4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...