【问题标题】:Select MultiIndex rows by level, in Pandas在 Pandas 中按级别选择 MultiIndex 行
【发布时间】:2022-06-15 01:58:00
【问题描述】:

如何从 MultiIndex DataFrame 中选择多于 1 个级别的行?例如,给定以下 DataFrame:

           col
L1  L2     
a   1      5624
    2      1656
    3      265677
    4      3755
b   5      47
    6      85544
c   7      97656
d   8      12774
e   9      111
    10     9478

我想最终得到一个如下所示的 DataFrame:

         col
L1  L2     
a   1      5624
    2      1656
    3      265677
    4      3755
b   5      47
    6      85544
e   9      111
    10     9478

【问题讨论】:

  • 选择的标准是什么?从例子看是模棱两可的
  • 标准是我想要在 L1 中有多个值的行。 "c" 和 "d" 都只有一个对应的 L2 子索引,所以我不想选择它们。

标签: python pandas multi-index


【解决方案1】:

查看transformcount

out = df[df.groupby(level=0)['col'].transform('count').values>1]

【讨论】:

    【解决方案2】:

    如果只想考虑第一层:

    df[df.index.get_level_values('L1').duplicated(keep=False)]
    # or
    df[df.index.get_level_values(0).duplicated(keep=False)]
    

    如果要考虑所有级别:

    df[df.index.to_frame().apply(pd.Series.duplicated, keep=False).any(1)]
    

    输出:

              col
    L1 L2        
    a  1     5624
       2     1656
       3   265677
       4     3755
    b  5       47
       6    85544
    e  9      111
       10    9478
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2018-06-24
      • 2022-01-25
      • 2019-05-24
      相关资源
      最近更新 更多