当前位置: 首页 > 面试题库 >

多索引数据框的lexsort_depth到底是什么?

穆才良
2023-03-14
问题内容

lexsort_depth多索引数据框的确切含义是什么?为什么必须对索引进行排序?

例如,我注意到df,如果我尝试这样做,则在手动构建具有按三个级别组织的列的多索引数据框之后:

idx = pd.IndexSlice
df[idx['foo', 'bar']]

我得到:

KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)'

在这一点上,df.columns.lexsort_depth0

但是, 如果我这样做,请按照此处的建议进行操作:

df = df.sortlevel(0,axis=1)

然后横截面索引就可以了。为什么?究竟是什么lexsort_depth,以及为什么使用排序来sortlevel修复这种类型的索引?


问题答案:

lexsort_depth 是按词法排序的多索引的级别数。即,以abc-1-2-3顺序(正常排序顺序)进行。

因此,如果未对多索引进行排序,则元素索引
起作用,但是查找可能会慢一些(在0.15.2中,这将显示PerformanceWarning用于进行此类查找的a,请参见此处

一般而言,排序是个好主意的原因是,pandas能够使用基于哈希的索引来独立于该级别找出特定级别中的位置。; 那么您可以使用这些索引器找到最终位置。

熊猫np.searchsorted在排序时会利用它们来查找这些位置。如果未排序,则必须回退到一些不同的(较慢的)方法。

这是执行此操作的代码。



 类似资料:
  • 问题内容: Java中的引用到底是什么?它是一个内存地址吗?Java引用等同于取消引用的C ++指针吗? 换句话说,给出以下内容: 上面的比较是否等同于比较C ++中的两个指针? 问题答案: 相当于在C / C ++中比较两个指针,是的。 但是,Java中的引用和C / C ++中的指针之间有两个非常重要的主要区别: Java引用无法执行指针算术:不能将3引用“加”, 只能 使其指向另一个(已知)

  • 问题内容: 我正在尝试采用一个数据框并将其转换为特定的json格式。 这是我的数据框示例: 这是我想转换成的json格式: 注意这是字典列表。我几乎在下面的代码中: 但是,该行还包含这样的索引: 请注意,这是一个字典,它还包含两次索引(在第一个字典中为索引,在第二个字典中为“ id”!对您有所帮助。 问题答案: 您可以使用

  • 基于单个值/标签的切片 基于一个或多个级别的多个标签的切片 布尔条件和表达式的过滤 哪些方法适用于什么情况 为简单起见的假设: 输入数据表没有重复的索引键 下面的输入数据只有两个级别。(此处所示的大多数解决方案都概括为N个级别) 问题2b 我如何获得级别“二”中对应于“t”和“w”的所有值? 如何从检索横截面,即具有索引特定值的单行?具体来说,如何检索的横截面,由 如何选择与和相对应的两行?

  • 好几个概念 1.函数依赖 2.非平凡和平凡函数依赖 3.完全和部分函数依赖 4.传递函数依赖 5.逻辑蕴涵 6.Armstrong公理系统 7.范式 头都大了,能不能用简单的语言解释下啊。

  • 问题内容: 有什么理由不应该为我的每个数据库表创建索引,以此来提高性能吗?似乎必须有一些原因,否则所有表在默认情况下都会自动具有一个。 我使用MS SQL Server 2016。 问题答案: 表上的一个索引并不重要。您会自动在作为主键或声明为唯一键的列(或列组合)上建立索引。 索引有一些开销。索引本身占用磁盘和内存的空间(使用时)。因此,如果空间或内存成为问题,那么索引过多可能会成为问题。插入/

  • 问题内容: 摘要:这不起作用: 但是这样做: 为什么? 再生产: 这不起作用: 但是这样做: 链接到笔记本 我的问题是: 为什么只有第二种方式起作用?我似乎看不到选择/索引逻辑的差异。 版本是0.10.0 编辑:这不应该再这样了。从0.11版开始,提供。参见此处:http : //pandas.pydata.org/pandas- docs/stable/indexing.html 问题答案: 大