代码之家  ›  专栏  ›  技术社区  ›  lucky1928

删除3列值相等的行

  •  2
  • lucky1928  · 技术社区  · 1 年前

    我想删除三列值相等的行。例如

    import pandas as pd
    
    data = [
        ['A',2,2,2],
        ['B',2,2,3],
        ['C',3,3,3],
        ['D',4,2,2],
        ['E',5,5,2]
        ]
    
    df = pd.DataFrame(data,columns=['name','val1','val2','val3'])
    print(df)
    
    

    在上述示例中, row 0 row 2 由于值相等,将被删除。

    2 回复  |  直到 1 年前
        1
  •  2
  •   Derek Roberts    1 年前

    您可以使用以下步骤轻松删除指定列具有相等值的行:

    第一步: 使用 df[['val1', 'val2', 'val3']].nunique(axis=1) 计算这些列中每行的唯一值数量。

    步骤2:其中唯一值的数量>=然后过滤行

    下面是代码片段来指导您

    #filters val1, val2, val3 is >=1
    df_filterd = df[df[['val1', 'val2', 'val3']].nunique(axis=1) > 1]
    
    print(df_filterd)
    
    

    结果:

      name  val1  val2  val3
    1    B     2     2     3
    3    D     4     2     2
    4    E     5     5     2
    

    您可以删除val1、val2、val3中所有值都相等的行,以下是您可以用来引用它的文档 drop

    df_drop = df[~df[['val1', 'val2', 'val3']].eq(df['val1'], axis=0).all(axis=1)]
    

    打印(df_drop)

    名称val1 val2 val3
    1 B 2 3
    3d 4 2 2
    4 E 5 2
    
        2
  •  0
  •   Andrej Kesely    1 年前

    尝试:

    print(df[df.loc[:, ["val1", "val2", "val3"]].nunique(axis=1).gt(1)])
    

    打印:

      name  val1  val2  val3
    1    B     2     2     3
    3    D     4     2     2
    4    E     5     5     2