2017-08-09 36 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

相關問題