如何更快地访问多索引内容?

时间:2014-03-27 00:38:05

标签: python pandas multi-index

假设我有一个多索引(在列上)数据框,如下所示:

           value                                        
serial         1         2         3         4         5
name                                                    
Tom     0.657175 -0.999668  0.750363  1.113235 -1.199095

我想使用for-loop访问每个列。我可以在多索引结构下完成:

#with multi-index

for i in range(1,6):
    x = df['value'][i]

然而,这比我将列拼写为一个级别要慢得多:

#collapse multi-index

df.columns = [x[0] + str(x[1]) for x in df.columns]
for i in range(1,6):
    x = df['value'+str(i)]

我不明白为什么会这样。由于我想保留数据帧的多索引结构,是否有更快的方式来访问内容?或者有没有办法轻松地将代码2中的索引转换回多索引?

评论:我意识到有两种方法可以访问多索引列,正如@joris所指出的那样。虽然两种方式都列在pandas文档中,但df [('value',i)]比df ['value'] [i]快得多;并且两者都比df ['value'+ str(i)]慢。以下是三种方式的速度比较:

%timeit -n 1000 x = df['value'][2]
1000 loops, best of 3: 350 µs per loop
%timeit -n 1000 x = df[('value', 2)]
1000 loops, best of 3: 18.6 µs per loop
%timeit -n 1000 x = df['value' + str(2)]
1000 loops, best of 3: 4.1 µs per loop

感谢任何帮助。

0 个答案:

没有答案