我有这只熊猫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]
提示?
答案 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