使用索引dict获取列值

时间:2018-01-16 15:32:12

标签: pandas dictionary

我有这只熊猫df:

                      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]

提示?

2 个答案:

答案 0 :(得分:3)

您可以使用类似SQL的方法DataFrame.query()

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

另一个词:

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

答案 1 :(得分: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