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上面的情况)。
谢谢。
我对 DataFrame 的一些常见操作的行/列倾向进行了粗略的个人总结:
[]: 列优先 get:仅列 query: 仅行loc, iloc, ix: 行优先 xs: 行优先 sortlevel: 行优先 groupby: 行优先 “row-first”表示操作需要行索引作为第一个参数,并且要对列索引进行操作需要使用[:, ]或指定axis=1;
“仅行”意味着该操作仅适用于行索引,并且必须执行一些操作,例如转置数据帧以对列索引进行操作。
基于此,似乎多索引行稍微方便一些。
我的一个自然问题是:为什么 pandas 开发人员不统一 DataFrame 操作的行/列倾向?例如,[]和loc/iloc/ix是索引数据帧的两种最常见的方式,但一种对列进行切片,另一种对行进行切片似乎有点奇怪。