前提是我有一个多索引数据帧,如下所示:
将熊猫导入为 pd
import pandas as pd
import numpy as np
input_id = np.array(['input_id'])
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(np.random.randint(1,10))+ '##' + str(np.random.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
# query a multiindex DF
idx = pd.IndexSlice
df.loc[idx[:,'pub',:,'de',:]]
结果:
我想直接获取多索引列 sec_ids 的值作为列表。我必须如何修改才能获得以下结果:
['x-y','z-k']
谢谢
答案 0 :(得分:2)
您可以使用 MultiIndex.get_level_values()
方法获取 MultiIndex 特定级别的值。所以在这种情况下,在切片之后调用它。
df.loc[idx[:,'pub',:,'de',:]].index.get_level_values('sec_ids').tolist()
#['x-y', 'z-k']