【问题标题】:How to drop duplicate rows based on values of two columns?如何根据两列的值删除重复的行?
【发布时间】:2020-03-17 00:39:59
【问题描述】:

我有一个这样的数据框:

Category Date_1       Score_1    Date_2           Score_2
  A      13/11/2019    5        13/11/2019        10
  A      13/11/2019    5        14/11/2019        55
  A      13/11/2019    5        15/11/2019        45
  A      13/11/2019    5        16/11/2019        80
  A      14/11/2019    3        13/11/2019        10
  A      14/11/2019    3        14/11/2019        55
  A      14/11/2019    3        15/11/2019        45
  A      14/11/2019    3        16/11/2019        80
  A      15/11/2019    7        13/11/2019        10
  A      15/11/2019    7        14/11/2019        55
  A      15/11/2019    7        15/11/2019        45
  A      15/11/2019    7        16/11/2019        80
  B      13/11/2019    4        13/11/2019        18
  B      13/11/2019    4        14/11/2019        65
  B      13/11/2019    4        15/11/2019        75
  B      13/11/2019    4        16/11/2019        89
  B      14/11/2019    9        13/11/2019        18
  B      14/11/2019    9        14/11/2019        65
  B      14/11/2019    9        15/11/2019        75
  B      14/11/2019    9        16/11/2019        89
  B      15/11/2019    8        13/11/2019        18
  B      15/11/2019    8        14/11/2019        65
  B      15/11/2019    8        15/11/2019        75
  B      15/11/2019    8        16/11/2019        89

我想保留两个日期相同的行。 我正在这样做:

df.drop_duplicates(subset=['Date_1', 'Date_2'])

但它不起作用。不知道如何删除那些多余的行?

【问题讨论】:

    标签: python pandas row data-science drop-duplicates


    【解决方案1】:

    使用boolean indexing 比较两列:

    df1 = df[df['Date_1'] == df['Date_2'])
    

    DataFrame.query:

    df1 = df.query("Date_1 == Date_2")
    

    【讨论】:

      【解决方案2】:

      您可以使用duplicated 和参数subset 指定要使用keep=False 检查的列,用于通过布尔索引屏蔽和过滤所有重复项。以下应该有效:

      df = df[df.duplicated(subset=['Date_1', 'Date_2'], keep=False)]
      

      备注:最初,我可能误读了 OP 想要删除重复项,答案如下:

      df = df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last')
      

      您应该始终像上面那样分配df 以应用更改。否则,您可以添加 inplace=True 以应用更改而无需分配:

      df.drop_duplicates(subset=['Date_1', 'Date_2'], keep='last', inplace=True)
      

      如果这与其他人提供的解决方案效果不佳,您可能需要检查subset 中的那些列的数据类型是否有任何差异,例如日期时间格式。

      【讨论】:

      • 实际上,该答案并没有回答所提出的问题,因为它没有“保留两个日期相同的行”。
      • @ArtyomAkselrod 感谢您指出这一点。最初我误读了 OP 想要删除重复项。给我一秒钟,我会更新答案。
      猜你喜欢
      • 2017-07-06
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多