查询带切片的多索引 pandas 数据帧

querying a multiindex pandas dataframe with slices

假设我有以下多索引 DF 将 pandas 导入为 pd

import numpy as np
import pandas as pd
input_id = np.array(['12345'])
docType = np.array(['pre','pub','app','dw'])
docId = np.array(['34455667'])
sec_type = np.array(['bib','abs','cl','de'])
sec_ids = np.array(['x-y','z-k'])
index = pd.MultiIndex.from_product([input_id,docType,docId,sec_type,sec_ids])
content= [str(randint(1,10))+ '##' + str(randint(1,10)) for i in range(len(index))]
df = pd.DataFrame(content, index=index, columns=['content'])
df.rename_axis(index=['input_id','docType','docId','secType','sec_ids'], inplace=True)
df

我知道我可以按如下方式查询多索引 DF:

# querying a multiindex DF
idx = pd.IndexSlice
df.loc[idx[:,['pub','pre'],:,'de',:]]

基本上在 pd.IndexSlice 的帮助下,我可以为每个索引传递我想要的值。在上述情况下,我想要生成的 DF,其中第二个索引是 'pub' OR 'pre',第四个是 'de'.

我正在寻找将一系列值传递给查询的方法。类似于 multiindex 3 beeing 在 34567 和 45657 之间。假设这些是整数。

pseudocode: df.loc[idx[:,['pub','pre'],XXXXX,'de',:]]
XXXX = ?

编辑 1: docId column index是text类型,可能需要先改成int

原来query很厉害:

df.query('docType in ["pub","pre"] and ("34455667" <= docId <= "3445568") and (secType=="de")')

输出:

                                          content
input_id docType docId    secType sec_ids        
12345    pre     34455667 de      x-y        2##9
                                  z-k        6##1
         pub     34455667 de      x-y        6##5
                                  z-k        9##8