MultiIndexing行与pandas DataFrame中的列

时间:2014-02-27 04:31:34

标签: python numpy pandas multi-index

我正在使用pandas中的多索引数据框,我想知道是否应该对行或列进行多重索引。

我的数据看起来像这样: DataTable

代码:

import numpy as np
import pandas as pd
arrays = pd.tools.util.cartesian_product([['condition1', 'condition2'], 
                                          ['patient1', 'patient2'],
                                          ['measure1', 'measure2', 'measure3']])
colidxs = pd.MultiIndex.from_arrays(arrays, 
                                    names=['condition', 'patient', 'measure'])
rowidxs = pd.Index([0,1,2,3], name='time')
data = pd.DataFrame(np.random.randn(len(rowidxs), len(colidxs)), 
                    index=rowidxs, columns=colidxs)

这里我选择对列进行多重索引,其基本原理是pandas dataframe由系列组成,而我的数据最终是一堆时间序列(因此在这里按时间行索引)。

我有这个问题,因为多列索引似乎在行和列之间存在一些不对称性。例如,在this文档网页中,它显示query如何为行多索引数据框工作,但如果数据帧是列多重索引,那么文档中的命令必须替换为{{1} }}。

我的问题可能看起来有些愚蠢,但我想看看多索引行与数据帧列之间的便利性是否存在差异(例如上面的df.T.query('color == "red"').T案例)。

感谢。

1 个答案:

答案 0 :(得分:0)

我称之为DataFrame的一些常见操作的行/列倾向的粗略个人摘要:

  • []:column-first
  • get:仅限列
  • 作为索引访问的属性:仅限列
  • query:仅限行
  • loc, iloc, ix:row-first
  • xs:row-first
  • sortlevel:row-first
  • groupby:row-first

"行第一"表示操作期望行索引作为第一个参数,并且要对列索引进行操作,需要使用[:, ]或指定axis=1;
"行只"表示该操作仅适用于行索引,并且必须执行诸如转置数据帧以对列索引进行操作之类的操作。

基于此,似乎多索引行更方便。

我的一个自然问题:为什么熊猫开发者不会统一DataFrame操作的行/列倾向?例如,[]loc/iloc/ix是索引数据帧的两种最常见方式,但是一个切片列和其他切片行似乎有点奇怪。