【问题标题】:How do I find duplicate indices in a DataFrame?如何在 DataFrame 中找到重复的索引?
【发布时间】:2015-03-16 20:38:32
【问题描述】:

我有一个带有多级索引(“实例”和“索引”)的 pandas DataFrame。我想找到所有非唯一的第一级(“实例”)索引值并打印出这些值。

我的框架是这样的:

                     A
instance  index      
      a       1      10
              2      12
              3      4
      b       1      12
              2      5
              3      2 
      b       1      12
              2      5
              3      2

我想找到“b”作为重复的0级索引并将其值(“b”)打印出来。

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    这应该给你整行,这不是你所要求的,但可能足够接近:

    df[df.index.get_level_values('instance').duplicated()]

    【讨论】:

      【解决方案2】:

      假设您的df 有一个由'instance''index' 组成的索引,您可以这样做:

      df1 = df.reset_index().pivot_table(index=['instance','index'], values='A', aggfunc='count')
      df1[df1 > 1].index.get_level_values(0).drop_duplicates()
      

      产量:

      Index([u'b'], dtype='object')
      

      在末尾添加.values (.drop_duplicates().values) 将组成一个数组:

      array(['b'], dtype=object)
      

      或者同样使用.groupby一行:

      df[df.groupby(level=['instance','index']).count() > 1].dropna().index.get_level_values(0).drop_duplicates()
      

      【讨论】:

        【解决方案3】:

        您可以使用get_duplicates() 方法:

        >>> df.index.get_level_values('instance').get_duplicates()
        [0, 1]
        

        (在我的示例数据中,01 都出现了多次。)

        get_level_values() 方法可以接受标签(例如“实例”)或整数,并检索 MultiIndex 的相关部分。

        【讨论】:

        • 它不起作用。原因可能是多索引:我有多个子索引(例如 0、1、2、3、4),而 get_level_values() 方法似乎不止一次从“实例”获取顶级索引,一次对于每个子级索引:('a','0') , ('a','1'), ('a','2'), ('a','3'), ('a','4')。索引 a 将被计算 5 次,因此 每个 顶级索引都是重复的。
        • 所以你只想在那个例子中计算一次'a'?因此,如果您将 0 级索引设为 ['a', 'a', 'a', 'b', 'b', 'a', 'a'],您会说 'a' 出现了两次,而 'b' 只出现了一次(或者我误解了)?
        • 我用我的 df 示例编辑了这个问题。索引“b”出现两次,我希望它打印出“重复索引:b”
        【解决方案4】:

        你想要复制的方法:

        df['Instance'].duplicated()
        

        【讨论】:

        • 这真的行不通。 “instance”是一个索引列,所以我无法通过 df[“instance”] 访问它。 df.loc["instance"] 似乎也不起作用......
        • 试试 df.ix['instance']。
        猜你喜欢
        • 2018-03-19
        • 2015-07-17
        • 2021-10-31
        • 2019-05-19
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 2020-08-22
        • 2022-08-09
        相关资源
        最近更新 更多