Python 在多级索引的一个级别上筛选数据帧
如果我有一个带有多级索引的pandas数据帧,如何按该索引的某个级别进行过滤。例如:Python 在多级索引的一个级别上筛选数据帧,python,pandas,Python,Pandas,如果我有一个带有多级索引的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不再是列。我可以把它作为一列保存,但我不想拖拽数据的副本 查询 indexli
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
不再是列。我可以把它作为一列保存,但我不想拖拽数据的副本 查询
indexlice
必须对数据帧索引进行排序
df.sort_index().loc[pd.IndexSlice[:, 2:], :]
val
id time
1 2 3
2 2 4
@piRSquared的解决方案更为惯用…您是在重复使用熊猫数据帧吗?真的吗?你必须传递字符串而不是在代码中?这是一种方法。恰巧也是一个快速的规模@亚历克斯·诺特
level='time',df.query(@level>1”)
与变量一起工作。@piRSquared:好吧,我对查询这件事很感兴趣。看来这是我最好的选择。熊猫世界中的人们通常只是在代码中动态地构建字符串并传递它们吗?具有讽刺意味的是,这种事情往往会让人泄气R@coldspeed:好提示,我只是在文档中看到了,谢谢!有趣的是,这与我猜答案应该是什么样的大致相同。请记住,查询是标准做法,正是我所想的。对于初学者来说,惯用的方法会变得复杂(但谁知道过滤df的常用方法),尤其是当你想与.isin()
或类似的东西进行比较时。我原以为它不会开箱即用,因为上面没有足够的插图,但后来我发现(所以df[df.A.isin(list_id)]
vsdf.query(@list_id中的A)
)
df.sort_index().loc[pd.IndexSlice[:, 2:], :]
val
id time
1 2 3
2 2 4
In [17]: df[df.index.get_level_values('time') > 1]
Out[17]:
val
id time
1 2 3
2 2 4