2017-08-09 182 views
2

我有一个带有索引数值的Pandas MultiIndex。如何使用索引位置修改Pandas MultiIndex Dataframe中具有位置数值的值

from itertools import product 
import pandas as pd 
import numpy as np 

df = pd.DataFrame({'group1': [1, 1, 1, 2, 2, 3], 
         'group2': [13, 18, 20, 77, 109, 123], 
         'value1': [1.1, 2, 3, 4, 5, 6], 
         'value2': [7.1, 8, 9, 10, 11, 12] 
         }) 
df = df.set_index(['group1', 'group2']) 

print df 

得到的数据框看起来像

   value1 value2 
group1 group2     
1  13   1.1  7.1 
     18   2.0  8.0 
     20   3.0  9.0 
2  77   4.0 10.0 
     109  5.0 11.0 
3  123  6.0 12.0 

我要访问使用索引数据框的值。例如位置'2' - >'77' - > value1是4.0。我该如何使用multiindex索引值(这将是1 - > 0 - > value1)来执行此操作。 1是第一个索引中的第二行。 0是第二个索引中的第一行。

回答

3

使用.loc和索引的元组(2, 77)

In [1487]: df.loc[(2, 77), 'value1'] 
Out[1487]: 4.0 

或者,使用.query

In [1488]: df.query('group1 == 2 and group2 == 77').value1 
Out[1488]: 
group1 group2 
2  77  4.0 
Name: value1, dtype: float64 
+0

这不是我正在寻找的。我想查询的索引位置(如1,0),而不是索引值。任何想法如何工作? – Chris

1

您可以使用slicers

idx = pd.IndexSlice 
print (df.loc[idx[2,77],'value1']) 
4.0 

也可以使用:

idx = pd.IndexSlice 
print (df.loc[idx[1,13:20],'value1']) 
group1 group2 
1  13  1.1 
     18  2.0 
     20  3.0 
Name: value1, dtype: float64 

MultiIndex中选择iloc尚未实施 - 请检查issue 7490

+0

这不是我正在寻找的。我想查询的索引位置(如1,0),而不是索引值。任何想法如何工作? – Chris

+1

我很害怕:(我尝试了很多东西,但它还没有实现 - 检查[this](https://github.com/pandas-dev/pandas/issues/7490) – jezrael

相关问题