Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列删除重复的行_Python_Pandas_Dataframe_Duplicates - Fatal编程技术网

Python 基于列删除重复的行

Python 基于列删除重复的行,python,pandas,dataframe,duplicates,Python,Pandas,Dataframe,Duplicates,我想问一个关于基于列(2列)删除重复行的问题 例如,我在下面构建了一个数据框架: 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 Mal

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

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

 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的时间
  • 对于城市-只有在有 重复,例如Singapore/Johor Bahru,仅显示最后一行 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
我使用了下面的代码,但基于日期的重复行似乎没有减少

因此,首先,我将“date”列转换为datetime格式

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')

有人能帮我吗?谢谢

在转换为
datetime
时删除
.dt.date
您创建了一个名为
date
的新列,但在删除重复项时,您仍然会引用旧的
date
列,将其替换为新的
date
列:
删除重复项(子集=['date','city',keep='last')
谢谢!这是个愚蠢的错误。我创建了一个新列来删除.dt.date,然后基于新列删除。这似乎奏效了!在转换为
datetime
时删除
.dt.date
您创建了一个名为
date
的新列,但在删除重复项时,您仍然会引用旧的
date
列,将其替换为新的
date
列:
删除重复项(子集=['date','city',keep='last')
谢谢!这是个愚蠢的错误。我创建了一个新列来删除.dt.date,然后基于新列删除。这似乎奏效了!