Pandas 使用索引dict获取列值

Pandas 使用索引dict获取列值,pandas,dictionary,Pandas,Dictionary,我有以下几点: value index1 index2 index3 1 1 1 10.0 2 -0.5 3 0.0 2 2 1 3.0 2 0.0 3 0.0 3 1

我有以下几点:

                      value
index1 index2 index3       
1      1      1        10.0
              2        -0.5
              3         0.0
2      2      1         3.0
              2         0.0
              3         0.0
       3      1         0.0
              2        -5.0
              3         6.0
我想使用dict来获得特定索引组合的“值”

通常,我使用,例如:

df = df.iloc[df.index.isin([2],level='index1')]
df = df.iloc[df.index.isin([3],level='index2')]
df = df.iloc[df.index.isin([2],level='index3')]
value = df.values[0][0]
现在,我想使用以下字典以较短的方式获得我的值=-5:

d = {'index1':2,'index2':3,'index3':2}
此外,如果我使用:

d={'index1':2,'index2':3}

我想获得阵列:

[0.0,-5.0,6.0]


提示?

您可以使用类似SQL的方法:

另一条格言:

In [77]: d = {'index1':2,'index2':3}

In [78]: df.query(' and '.join('{}=={}'.format(k,v) for k,v in d.items()))
Out[78]:
                      value
index1 index2 index3
2.0    3.0    1         0.0
              2        -5.0
              3         6.0

非查询方式是

In [64]: df.loc[np.logical_and.reduce([
                 df.index.get_level_values(k) == v for k, v in d.items()])]
Out[64]:
                      value
index1 index2 index3
2      3      2        -5.0

我是如此接近,但这是非常动态的。是的,一般的解决方案只有使用
query
In [64]: df.loc[np.logical_and.reduce([
                 df.index.get_level_values(k) == v for k, v in d.items()])]
Out[64]:
                      value
index1 index2 index3
2      3      2        -5.0