【问题标题】:pandas multiindex - remove rows based on number of sub indexpandas multiindex - 根据子索引的数量删除行
【发布时间】:2020-05-14 02:00:43
【问题描述】:

这是我的数据框:

df = pd.DataFrame(pd.DataFrame({"C1" : [0.5, 0.9, 0.1, 0.2, 0.3, 0.5, 0.2], 
                            "C2" : [200, 158, 698, 666, 325, 224, 584], 
                            "C3" : [15, 99, 36, 14, 55, 62, 37]},
                           index = pd.MultiIndex.from_tuples([(0,0), (1,0), (1,1), (2,0), (2,1), (3,0), (4,0)], 
                                                         names=['L1','L2'])))

df :

         C1      C2     C3
L1  L2          
0   0   0.5     200     15
1   0   0.9     158     99
    1   0.1     698     36
2   0   0.2     666     14
    1   0.3     325     55
3   0   0.5     224     62
4   0   0.2     584     37

我想保留在 L1 子索引中只有一个值的行(在这种情况下为 0)以获得类似的结果:

         C1      C2     C3
L1  L2          
0   0   0.5     200     15
3   0   0.5     224     62
4   0   0.2     584     37

请问,如果您有任何解决此问题的线索,请告诉我?

真诚的

【问题讨论】:

    标签: python python-3.x pandas multi-index


    【解决方案1】:

    在第一级使用GroupBy.transform 与任何带有GroupBy.size 的列并通过Series.eq 进行比较并通过boolean indexing 进行过滤:

    df1 = df[df.groupby(level=0)['C1'].transform('size').eq(1)]
    

    或通过Index.get_level_values 提取第一级索引并通过~ 使用Index.duplicatedkeep=False 过滤所有欺骗:

    df1 = df[~df.index.get_level_values(0).duplicated(keep=False)]
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2019-09-15
      • 2015-07-19
      • 2021-10-12
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多