【问题标题】:Drop duplicates, keep most recent date, Pandas dataframe删除重复项,保留最新日期,Pandas 数据框
【发布时间】:2018-09-18 23:19:52
【问题描述】:

我有一个包含两列的 Pandas 数据框:一个日期时间列和一列表示站 ID 的整数。我需要一个具有以下修改的新数据框:

对于每组重复的STATION_ID 值,保留DATE_CHANGED 的最新条目所在的行。如果STATION_ID 的重复条目都包含相同的DATE_CHANGED,则删除重复项并为STATION_ID 保留一行。如果STATION_ID 值没有重复项,则只需保留该行即可。

数据框(按STATION_ID排序):

              DATE_CHANGED  STATION_ID
0      2006-06-07 06:00:00           1
1      2000-09-26 06:00:00           1
2      2000-09-26 06:00:00           1
3      2000-09-26 06:00:00           1
4      2001-06-06 06:00:00           2
5      2005-07-29 06:00:00           2
6      2005-07-29 06:00:00           2
7      2001-06-06 06:00:00           2
8      2001-06-08 06:00:00           4
9      2003-11-25 07:00:00           4
10     2001-06-12 06:00:00           7
11     2001-06-04 06:00:00           8
12     2017-04-03 18:36:16           8
13     2017-04-03 18:36:16           8
14     2017-04-03 18:36:16           8
15     2001-06-04 06:00:00           8
16     2001-06-08 06:00:00          10
17     2001-06-08 06:00:00          10
18     2001-06-08 06:00:00          11
19     2001-06-08 06:00:00          11
20     2001-06-08 06:00:00          12
21     2001-06-08 06:00:00          12
22     2001-06-08 06:00:00          13
23     2001-06-08 06:00:00          13
24     2001-06-08 06:00:00          14
25     2001-06-08 06:00:00          14
26     2001-06-08 06:00:00          15
27     2017-08-07 17:48:25          15
28     2001-06-08 06:00:00          15
29     2017-08-07 17:48:25          15
...                    ...         ...
157066 2018-08-06 14:11:28       71655
157067 2018-08-06 14:11:28       71656
157068 2018-08-06 14:11:28       71656
157069 2018-09-11 21:45:05       71664
157070 2018-09-11 21:45:05       71664
157071 2018-09-11 21:45:05       71664
157072 2018-09-11 21:41:04       71664
157073 2018-08-09 15:22:07       71720
157074 2018-08-09 15:22:07       71720
157075 2018-08-09 15:22:07       71720
157076 2018-08-23 12:43:12       71899
157077 2018-08-23 12:43:12       71899
157078 2018-08-23 12:43:12       71899
157079 2018-09-08 20:21:43       71969
157080 2018-09-08 20:21:43       71969
157081 2018-09-08 20:21:43       71969
157082 2018-09-08 20:21:43       71984
157083 2018-09-08 20:21:43       71984
157084 2018-09-08 20:21:43       71984
157085 2018-09-05 18:46:18       71985
157086 2018-09-05 18:46:18       71985
157087 2018-09-05 18:46:18       71985
157088 2018-09-08 20:21:44       71990
157089 2018-09-08 20:21:44       71990
157090 2018-09-08 20:21:44       71990
157091 2018-09-08 20:21:43       72003
157092 2018-09-08 20:21:43       72003
157093 2018-09-08 20:21:43       72003
157094 2018-09-10 17:06:18       72024
157095 2018-09-10 17:15:05       72024

[157096 rows x 2 columns]

DATE_CHANGEDdtype: datetime64[ns]

STATION_IDdtype: int64

熊猫==0.23.4

python==2.7.15

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试:

    df.sort_values('DATE_CHANGED').drop_duplicates('STATION_ID',keep='last')
    

    【讨论】:

    • 如果还有一列“状态”,状态的值就像成功和失败一样。如果 STATION_ID 成功和失败,我想根据条件删除重复项,我们将获取成功并删除失败行。我们如何才能做到这一点?
    • @Taylor 您可能已经解决了这个问题,但是您应该能够简单地将Status 列添加到.sort_values() 参数并定义排序的asc/desc naure,如fail 将在 success 之前,即 df.sort_values(['DATE_CHANGED', 'Status'], ascending = [True, False])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2017-02-12
    • 2020-08-04
    • 2020-12-23
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多