2014-02-27 96 views
4

我正在使用pandas中的multiindexing数据框,并且想知道我是否应该多行索引行或列。多重索引行与大熊猫的列DataFrame

我的数据看起来是这样的: 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) 

在这里,我选择多指标列,与大熊猫数据帧由一系列的理由,我的数据最终是一串时间序列(因此在这里按时间索引)。

我有这个问题,因为它似乎有行和列之间的一些不对称multiindexing。例如,在this文档网页中,它显示query如何工作于行多索引数据帧,但是如果数据帧是列多索引,则文档中的命令必须用df.T.query('color == "red"').T之类的内容替换。

我的问题看起来可能有点愚蠢,但我想看看在数据框的多重索引行与列之间是否有区别(如上面的query例子)。

谢谢。

+0

这真的取决于你想如何操纵,输出和查看你的数据。我怀疑行上的多索引更有用(可能更有效,但我真的不知道)。如果你打算操纵按列索引的数据范围,那么是的,多列对你来说更好。 – Will

+0

这是一个很好的问题,因为某些领域的数据集通常是时间序列,但可能会分成一系列类别,如示例中所示。按列分析MultiIndex会有帮助。 – Hamid

回答

0

我称之为行/一些常用的操作为数据帧列倾向粗略的个人总结:

  • []:列第一
  • get:列仅
  • 属性访问作为索引:列仅
  • query:行仅
  • loc, iloc, ix:行第一
  • xs:行第一
  • sortlevel:行第一
  • groupby:行第一

“行第一”是指该操作预计行索引作为第一个参数,并在柱操作索引人需要使用[:, ]或指定axis=1;
“仅行”表示该操作仅适用于行索引,并且必须执行一些操作,例如转置数据帧以对列索引进行操作。

基于此,看起来multiindexing行稍微方便一些。

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

+1

loc/iloc/ix是多轴索引器,能够同时索引所有轴; []只处理列,并且是一个类似访问器的字典;这些都是非常独特和有用的权利。最常见的操作可能是[]访问;这使得难以做到这一点只会使代码更加冗长 – Jeff