pandas DataFrame 中的多重索引行与列

Lei*_*Lei 5 python numpy multi-index pandas

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

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

代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

我的问题可能看起来有点愚蠢,但我想看看数据帧的多索引行与列之间在便利性上是否有任何差异(例如query上面的情况)。

谢谢。

Lei*_*Lei 1

我对 DataFrame 的一些常见操作的行/列倾向进行了粗略的个人总结:

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

“row-first”表示操作需要行索引作为第一个参数,并且要对列索引进行操作需要使用[:, ]或指定axis=1
“仅行”意味着该操作仅适用于行索引,并且必须执行一些操作,例如转置数据帧以对列索引进行操作。

基于此,似乎多索引行稍微方便一些。

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