【问题标题】:MultiIndexing rows vs. columns in pandas DataFramePandas DataFrame 中的多索引行与列
【发布时间】:2014-03-30 07:49:22
【问题描述】:

我正在处理 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)

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

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

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

谢谢。

【问题讨论】:

  • 这真的取决于你想如何操作、输出和.或查看你的数据。我怀疑行上的多索引更有用(虽然我真的不知道,但可能更有效)。如果您打算操作按列索引的数据范围,那么是的,多列更适合您。
  • 这是一个很好的问题,因为某些字段的数据集通常是时间序列,但可能属于示例中所示的一系列类别。按列了解 MultiIndex 会很有帮助。
  • 你得出什么结论了吗?我认为在 7 年多之后是的 :-) 分享您最终选择的方向以及原因(即取决于您的查询等)会很有帮助。

标签: python numpy pandas multi-index


【解决方案1】:

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

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

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

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

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

【讨论】:

  • loc/iloc/ix 是多轴分度器,能够同时对所有轴进行分度; [] 只处理列并且是一个类似于访问器的dict;它们本身就非常独特和有用。最常见的操作可能是 [] 访问;更难做到这一点只会让代码更冗长
  • 你得出什么结论了吗?我认为在 7 年多之后是的 :-) 分享您最终选择的方向以及原因(即取决于您的查询等)会很有帮助。或@Jeff 可能会详细说明。
猜你喜欢
  • 2020-09-13
  • 2021-11-22
  • 2016-02-17
  • 2019-04-13
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2021-11-11
  • 2021-12-01
相关资源
最近更新 更多