如果我有一个带有多级索引的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)
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
df[df["time"] > 1]
Run Code Online (Sandbox Code Playgroud)
但time不再是专栏.我可以将它保留为列,但我不想拖动数据副本.
In [17]: df[df.index.get_level_values('time') > 1]
Out[17]:
val
id time
1 2 3
2 2 4
Run Code Online (Sandbox Code Playgroud)
@ piRSquared的解决方案虽然更具惯用性......
querydf.query('time > 1')
val
id time
1 2 3
2 2 4
Run Code Online (Sandbox Code Playgroud)
IndexSliceDataFrame索引必须是lexsorted
df.sort_index().loc[pd.IndexSlice[:, 2:], :]
val
id time
1 2 3
2 2 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2901 次 |
| 最近记录: |