2015-11-11 186 views
0

我有这样的代码:多指标大熊猫据帧

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 

有什么达到这个目标的最佳方式我知道它必须与多索引有关,但我不确定如何。

+1

对不起,你要求'df.loc [(df ['x'] == 3)&(df ['y'] == 33),'val']'? – EdChum

+0

这确实会给出正确的结果,但我想知道是否有更优雅的,语法清晰的方法。 –

+0

那么你没有一个多索引在这里,除了你要找的是行值匹配你没有在这里使用任何索引 – EdChum

回答

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 

你可以包装冷杉t版本变成一个func

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' 
+0

这似乎是相当浪费的构建一个多索引的df用于返回单个元素 – EdChum