【问题标题】:Return entries with common columns values in pandas DataFrame - python在pandas DataFrame中返回具有公共列值的条目 - python
【发布时间】:2017-09-29 20:14:25
【问题描述】:

我在 python pandas 中有一个 DataFrame,其中包含几个不同的条目(行),列中也有整数值,例如:

   A  B  C  D  E  F  G  H
0  1  2  1  0  1  2  1  2  
1  0  1  1  1  1  2  1  2
2  1  2  1  2  1  2  1  3
3  0  1  1  1  1  2  1  2 
4  2  2  1  2  1  2  1  3

我只返回列中包含共同值的行,结果应该是:

   A  B  C  D  E  F  G  H  
1  0  1  1  1  1  2  1  2
3  0  1  1  1  1  2  1  2 

提前致谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    需要带有参数keep=False 的duplicated 以返回带有boolean indexing 的所有重复项:

    print (df.duplicated(keep=False))
    0    False
    1     True
    2    False
    3     True
    4    False
    dtype: bool
    
    df = df[df.duplicated(keep=False)]
    print (df)
       A  B  C  D  E  F  G  H
    1  0  1  1  1  1  2  1  2
    3  0  1  1  1  1  2  1  2
    

    如果需要删除第一个或最后一个重复行,请使用:

    df1 = df[df.duplicated()]
    #same as 'first', default parameter, so an be omit
    #df1 = df[df.duplicated(keep='first')]
    print (df1)
       A  B  C  D  E  F  G  H
    3  0  1  1  1  1  2  1  2
    
    df2 = df[df.duplicated(keep='last')]
    print (df2)
       A  B  C  D  E  F  G  H
    1  0  1  1  1  1  2  1  2
    

    【讨论】:

      【解决方案2】:

      您可以使用来自duplicated 的布尔掩码传递参数keep=False:

      In [3]:
      df[df.duplicated(keep=False)]
      
      Out[3]:
         A  B  C  D  E  F  G  H
      1  0  1  1  1  1  2  1  2
      3  0  1  1  1  1  2  1  2
      

      这是显示重复行的掩码,传递 keep=False 返回所有重复行,默认情况下它将返回第一个重复行:

      In [4]:
      df.duplicated(keep=False)
      
      Out[4]:
      0    False
      1     True
      2    False
      3     True
      4    False
      dtype: bool
      

      【讨论】:

        猜你喜欢
        • 2019-06-15
        • 1970-01-01
        • 2017-04-02
        • 2019-02-14
        • 2016-10-06
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        相关资源
        最近更新 更多