根据列删除重复的行

时间:2020-07-26 06:50:55

标签: python pandas dataframe duplicates

我想问一个有关删除基于列(两列)的重复行的问题

例如,我在下面构造了一个数据框:

 country     city           date                col_d 
 Singapore   Singapore     2020-07-17 09:00     5
 Singapore   Singapore     2020-07-17 18:00     5
 Malaysia    Johor Bahru   2020-07-17 09:00     5
 Malaysia    Johor Bahru   2020-07-17 18:00     6
 Singapore   Singapore     2020-07-18 09:00     0
 Singapore   Singapore     2020-07-18 18:00     10
 Malaysia    Johor Bahru   2020-07-19 09:00     0
 Malaysia    Johor Bahru   2020-07-19 18:00     6
 Malaysia    Senlangor     2020-07-19 09:00     6

我想执行一项操作,即根据“日期”和“城市”删除重复的行。

  • 对于日期-我只希望保留最后一行,这意味着 应该保持18:00的时间。
  • 对于城市-仅在有 复制品,例如新加坡/新山,仅最后一行 应该保持18:00的时间。
  • 请注意,col_d也具有不同的值,这就是为什么我 希望保留18:00所在的行。

因此正确的DF应该如下所示:

 country     city           date                col_d 
 Singapore   Singapore     2020-07-17 18:00     5
 Malaysia    Johor Bahru   2020-07-17 18:00     6
 Singapore   Singapore     2020-07-18 18:00     10
 Malaysia    Johor Bahru   2020-07-19 18:00     6
 Malaysia    Senlangor     2020-07-19 09:00     6

我使用了下面的代码,但看来基于日期的重复行并没有丢失。

因此,首先,我首先将“日期”列转换为日期时间格式。

df['Date'] = pd.to_datetime(df['date']).dt.date

由于数据已经按升序排序,所以我没有添加其他代码以按升序排序。

所以看起来像这样:

 country     city          date            col_d 
 Singapore   Singapore     2020-07-17      5
 Singapore   Singapore     2020-07-17      5
 Malaysia    Johor Bahru   2020-07-17      5
 Malaysia    Johor Bahru   2020-07-17      6
 Singapore   Singapore     2020-07-18      0
 Singapore   Singapore     2020-07-18      10
 Malaysia    Johor Bahru   2020-07-19      0
 Malaysia    Johor Bahru   2020-07-19      6
 Malaysia    Senlangor     2020-07-19      6

此后,我使用下面的代码“删除”所有重复的行,同时保留“ last”。如上所述,它不起作用。

df.drop_duplicates(subset=['date','city'], keep='last')

有人可以帮助我吗?感激!

0 个答案:

没有答案