用于pandas数据帧的MultiIndex

时间:2015-11-11 16:35:42

标签: python pandas dataframe multi-index

我有这段代码:

 new_dict = {'x':[1,2,3,4,5], 'y':[11,22,33,44,55], 'val':[100, 200, 300, 400, 500]}
df = pd.DataFrame.from_dict(new_dict)   
    val  x   y
0  100  1  11
1  200  2  22
2  300  3  33
3  400  4  44
4  500  5  55

我希望能够将xy的值结合使用作为val的索引, 例如

df[3][33]
300

实现这一目标的最佳方法是什么?我知道它必须与多索引有关,但我不确定如何。

2 个答案:

答案 0 :(得分:1)

您可以定义一个功能:

new_dict = {'x':[1,2,3,4,5], 'y':[11,22,33,44,55], 'val':[100, 200, 300, 400,   500]}

df = pd.DataFrame.from_dict(new_dict) 

def multindex(x,y):
    return df.set_index(['x','y']).loc[x,y]

multindex(1,11) #will return '100'

答案 1 :(得分:1)

您可以将2个布尔条件定义为遮罩,并与.loc一起使用:

df.loc[(df['x']==3) & (df['y']==33), 'val']

否则只需设置索引,然后您可以使用这些值索引到df:

In [233]:
df = df.set_index(['x','y'])
df.loc[3,33]

Out[233]:
val    300
Name: (3, 33), dtype: int64

你可以很容易地将第一个版本包装成一个函数