【问题标题】:Pandas slicing along multiindex and separate indicesPandas 沿多索引和单独索引切片
【发布时间】:2013-01-08 12:11:08
【问题描述】:

我已经开始将 Pandas 用于一些大型数据集,而且大多数情况下它都运行良好。不过,我对索引有一些疑问

  1. 我有一个具有三个级别的 MultiIndex - 比如说 a、b、c。如何沿索引 a 切片 - 我只想要 a = 5、7、10、13 的值。执行 df.ix[[5, 7, 10, 13]] 不像文档中指出的那样工作

  2. 我需要在 DF 上有不同的索引 - 我可以创建这些多个索引而不将它们与数据帧相关联并使用它们返回原始 ndarray 索引吗?

  3. 我可以单独对 MultiIndex 进行切片,而不是在系列或数据帧中吗?

提前致谢

【问题讨论】:

标签: python pandas


【解决方案1】:

对于第一部分,您可以使用 get_level_values 进行布尔索引:

df[df.index.get_level_values('a').isin([5, 7, 10, 13])]

对于后两个,您可以通过调用检查MultiIndex 对象:

df.index

(并且可以检查/切片。)

【讨论】:

  • 太棒了!所以我还有一个问题。我可以对多索引进行切片,但我给它一个原始索引,它给我一个元组。我想要反过来,所以:myindex[1, 2, 4]
  • @WolfgangKerzendorf 所以你想把它导出到一个数组中吗?我认为问题在于,pandas 在幕后使用 .level 的索引进行存储,并且不存储此数组......我会再看一看。希望有比np.array(map(np.array, df.index.values)) (!) 更好的方法
  • 于是我发现index.get_loc和我想要的差不多。它从键转换为实际位置 - 但它不如系列的 .ix 符号有用。现在我想我会做 my_index = Series(arange(len(df)), index=myselectedindex)
  • df.index.get_level_values('a') 返回一个没有 isin 方法的数组。
  • @WolfgangKerzendorf 你用的是什么版本的熊猫?
【解决方案2】:

编辑:此答案仅适用于低于 0.10.0 的熊猫版本:

好的,@hayden 有一个正确的想法:

索引有 get_level_values() 方法,但是它返回一个数组(在 pandas 版本 isin() 方法,但这有效:

from pandas import lib
lib.ismember(df.index.get_level_values('a'), set([5, 7, 10, 13])

这只能回答问题 1 - 但如果我破解 2、3,我会提供更新(在 @hayden 的帮助下完成了一半)

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2021-08-25
    • 2015-03-16
    • 2018-12-29
    • 2015-08-21
    • 2018-05-20
    • 2017-05-23
    • 2021-12-31
    • 2018-11-22
    相关资源
    最近更新 更多