【问题标题】:Panda Dataframe Find rows which does not have equivalent value in the DataFramePanda Dataframe 查找 DataFrame 中没有等效值的行
【发布时间】:2023-03-10 11:22:01
【问题描述】:

数据帧:

    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

找出这些行的任何解决方案?谢谢!

【问题讨论】:

  • 作为对@jezrael 回答的补充,我添加了一种替代方法来获取配对数据(,如果行数为偶数,则仅保留第一个配对数据)

标签: python pandas


【解决方案1】:

如果可能,请通过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】:

    这是一种只取一对行的替代方法,作为管道工作:

    (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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-25
      • 2018-03-11
      • 1970-01-01
      • 2016-12-07
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多