Python 查询数据框架中的多索引-特殊索引

Python 查询数据框架中的多索引-特殊索引,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一个针对多索引数据帧的特定查询,我无法理解如何实现它。不幸的是,不同网站上的各种解释无助于此。工作示例: col1 = ['30/01/2021','30/01/2021','31/01/2021','31/01/2021','01/02/2021','01/02/2021'] col2 = ['USD','EUR','USD','EUR','USD','EUR'] col3 = ['3M','1M','1M','3M','3M','6M'] col4 = [0.9,0.95,0.89,0.

我有一个针对多索引数据帧的特定查询,我无法理解如何实现它。不幸的是,不同网站上的各种解释无助于此。工作示例:

col1 = ['30/01/2021','30/01/2021','31/01/2021','31/01/2021','01/02/2021','01/02/2021']
col2 = ['USD','EUR','USD','EUR','USD','EUR']
col3 = ['3M','1M','1M','3M','3M','6M']
col4 = [0.9,0.95,0.89,0.91,0.94,0.92]

df = pd.DataFrame(index = [col1, col2, col3], data = col4, columns = ['Value'])
我现在可以应用“简单”索引,如:

df.loc[:,['USD','EUR'],:]
这将为我提供美元和欧元的所有条目:

                   Value
30/01/2021 USD 3M   0.90
31/01/2021 USD 1M   0.89
01/02/2021 USD 3M   0.94
30/01/2021 EUR 1M   0.95
31/01/2021 EUR 3M   0.91
01/02/2021 EUR 6M   0.92

这将为我提供100万或300万美元和欧元的所有条目:

                   Value
31/01/2021 USD 1M   0.89
30/01/2021 USD 3M   0.90
01/02/2021 USD 3M   0.94
30/01/2021 EUR 1M   0.95
31/01/2021 EUR 3M   0.91
然而,我实际上想要的是所有条目(货币美元和时间百万)所有条目(货币欧元和时间百万)

也就是说,我希望有一个结果(日期相同是这个例子的巧合,所以我不能简单地寻找日期)

我怎样才能做到这一点?我尝试了不同版本的元组和列表组合,但如前所述,我无法理解


感谢您的指导。

您可以通过两个列表创建
多索引
,然后通过删除原始
多索引
的第一级、测试者和筛选,将其与第二级和第三级匹配:

                   Value
31/01/2021 USD 1M   0.89
30/01/2021 USD 3M   0.90
01/02/2021 USD 3M   0.94
30/01/2021 EUR 1M   0.95
31/01/2021 EUR 3M   0.91
                   Value
31/01/2021 USD 1M   0.89                   
31/01/2021 EUR 3M   0.91
a = ['USD','EUR']
b = ['1M','3M']

mux = pd.MultiIndex.from_arrays([a, b])

df = df[df.index.droplevel(0).isin(mux)]
print (df)
                       Value
31/01/2021 USD 1M   0.89
           EUR 3M   0.91