如何在 Pandas MultiIndex 数据框中用索引位置修改具有数值的位置上的值

3
我有一个Pandas MultiIndex,其索引值为数值类型。
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。如何使用多重索引值进行此操作,这将是 1 -> 0 -> value1。其中 1 是第一个索引中的第二行,0 是第二个索引中的第一行。

2个回答

4
使用.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

这不是我想要的。我想按索引位置(如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 选择尚未实现 - 请查看 问题7490


这不是我想要的。我想按索引位置(如1,0)查询,而不是按索引值查询。你有什么想法吗? - Chris
1
我对此感到担忧 :( 我尝试了很多方法,但它还没有实现 - 请查看这里 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接