首页 > 解决方案 > 通过指定多索引从原始数据帧中提取子数据帧

问题描述

首先,我制作了一个具有两个索引的以下数据框,file_id因此obj_id左侧的两个数据不是列。

file_id    obj_id    val_1    val_2 ...
'file_1'   0         111      222
           2         111      222
           4         413      1231
'file_2'   5         111      222
           27        111      222
           3         413      1231       
           9         413      1231 
'file_3'   0         111      222
           2         111      222
           4         413      1231
...    

我想提取指定的多行file_id并创建一个保持原始结构的新数据框。例如,如果我有一个 list ['file_1', 'file_3'],则所需的输出是

file_id    obj_id    val_1    val_2 ...
'file_1'   0         111      222
           2         111      222
           4         413      1231
'file_3'   0         111      222
           2         111      222
           4         413      1231

我首先尝试删除所有不必要的行,但它需要指定第二个索引obj_id,所以

df.drop(['file_2', 'file_4', 'file_5' ...]) # Throw exception
df.drop(('file_2', 5)) # Works but leave other rows in file_2, I need to drop all row in file_2

file_id    obj_id    val_1    val_2 ...
'file_2'   27        111      222
           3         413      1231
           9         413      1231 
...

obj_id取决于每个file_id,除非有通配符之类的东西,否则这种丢弃方法不起作用。删除也需要很多步骤,我希望我可以简单地按列表提取行file_id。有什么解决办法吗?

标签: pythonpandasdataframe

解决方案


只需将我的评论发布为答案,以便 OP 将其标记为已回答:

由于文件是MultiIndex you should just need to use .loc` 的最外层:

df.loc[["file_1", "file_2"], :]

推荐阅读