如何解决使用切片查询多索引熊猫数据框
假设我有以下多索引 DF 将熊猫导入为 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'。
我正在寻找将一系列值传递给查询的方法。类似于 34567 和 45657 之间的多索引 3。假设它们是整数。
pseudocode: df.loc[idx[:,XXXXX,:]]
XXXX = ?
编辑 1: docId 列索引为文本类型,可能需要先将其更改为 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。