【问题标题】:Select slice of dataframe according to value of multiIndex根据 multiIndex 的值选择数据帧的切片
【发布时间】:2019-10-09 19:16:55
【问题描述】:

我有一个 multiIndex 数据框。

我可以使用以下方法创建逻辑掩码:

df.index.get_level_values(0).to_series().str.find('1000')!=-1

这将为第一个索引级别包含字符 '1000'False 的所有行返回一个布尔值 True

但我无法使用该掩码对数据帧进行切片。

我试过了:

df[df.index.get_level_values(0).to_series().str.find('1000')!=-1]

它返回以下错误:

ValueError: cannot reindex from a duplicate axis

我也试过了:

df[df.index.get_level_values(0).to_series().str.find('1000')!=-1,:]

它只返回逻辑掩码作为输出和以下错误:

Length: 1755, dtype: bool, slice(None, None, None))' is an invalid key

有人可以指出正确的解决方案以及如何正确切片 multiIndex 数据帧的良好参考吗?

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    一个想法是删除to_series() 并使用Series.str.contains 作为测试子字符串:

    df[df.index.get_level_values(0).str.contains('1000')]
    

    另一个是将掩码转换为numpy数组:

    df[df.index.get_level_values(0).str.contains('1000').values]
    

    将掩码值转换为数组的解决方案:

    df[(df.index.get_level_values(0).to_series().str.find('1000')!=-1).values]
    

    【讨论】:

      猜你喜欢
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2021-04-02
      相关资源
      最近更新 更多