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

Panda Dataframe查找数据框中没有等效值的行

  •  0
  • xzk  · 技术社区  · 3 年前

        column1     column2
    0   some_data   string1
    1   some_data   string1
    2   some_data   string2
    3   some_data   string3
    4   some_data   string2
    5   some_data   string4
    5   some_data   string4
    ...
    20k+ rows in total
    

    说明: 对于大多数行,column2数据成对显示。我想找出没有成对数据的行(例如string3)

       column1    column2
    0   some_data  string3
    

    有什么办法可以找出这样的问题吗?谢谢

    1 回复  |  直到 3 年前
        1
  •  0
  •   jezrael    3 年前

    如果可能的话,简化查找到的所有行的问题,而不使用复制 column2 使用:

    df1 = df[~df['column2'].duplicated(keep=False)]
    

    如果需要测试计数并过滤所有不带对的行(2):

    df2 = df[df.groupby('column2')['column2'].transform('size').ne(2)]
    

    此外,如果需要测试所有对,这意味着 2, 4, 6, 8 ... 使用:

    df3 = df[df.groupby('column2')['column2'].transform('size') % 2 == 1]
    
        2
  •  0
  •   mozway    3 年前

    以下是一种仅获取一对行的替代方法,用作管道:

    (df.groupby('column2', as_index=False)
       .apply(lambda d: d.iloc[:2*(len(d)//2)]) # transform any odd to previous even
       .droplevel(0)
    )
    

         column1  column2
    0  some_data  string1
    1  some_data  string1
    2  some_data  string2
    4  some_data  string2
    5  some_data  string4
    5  some_data  string4