假设我有一个多索引(在列上)数据框,如下所示:
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
感谢任何帮助。