每5分钟删除一次重复项

时间:2019-01-19 10:45:09

标签: python pandas

我正在尝试从数据集中删除每5分钟时间范围内出现的重复ID。数据框看起来像这样;

|---------------------|------------------|------------------|
|          ID         |       Date       |        Time      |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:01:00    |
|---------------------|------------------|------------------|
|          13         |     2012-1-1     |      00:01:30    |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:04:30    |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:05:10    |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:10:00    |
|---------------------|------------------|------------------|

应该成为哪个人

|---------------------|------------------|------------------|
|          ID         |       Date       |        Time      |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:01:00    |
|---------------------|------------------|------------------|
|          13         |     2012-1-1     |      00:01:30    |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:05:10    |
|---------------------|------------------|------------------|
|          12         |     2012-1-1     |      00:10:00    |
|---------------------|------------------|------------------|

第二次出现“ 12”时,应将其标记为重复,因为它在时间范围00:00:00-00:05:00中再次出现。

我正在使用熊猫清理当前数据集。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

从添加 DatTim 列(类型为 DateTime )开始,获取源 日期时间的数据:

df['DatTim'] = pd.to_datetime(df.Date + ' ' + df.Time)

然后,假设ID是“普通”列(而不是索引), 您应该致电:

  • groupby列上的{li> DatTim,频率为5 min
  • 向每个组应用drop_duplicatessubset仅包括ID列。
  • 最后从索引中删除DatTim

在Python中表达上述说明:

df2 = df.groupby(pd.Grouper(key='DatTim', freq='5min'))\
    .apply(lambda grp: grp.drop_duplicates(subset='ID'))\
    .reset_index(level=0, drop=True)

如果您print(df2),您将获得:

   ID      Date      Time              DatTim
0  12  2012-1-1  00:01:00 2012-01-01 00:01:00
1  13  2012-1-1  00:01:30 2012-01-01 00:01:30
3  12  2012-1-1  00:05:10 2012-01-01 00:05:10
4  12  2012-1-1  00:10:00 2012-01-01 00:10:00

要“清理”,您可以删除DatTim列:

df2.drop('DatTim', axis=1)

编辑

如果ID是索引,则需要稍作更改:

df2 = df.groupby(pd.Grouper(key='DatTim', freq='5min'))\
    .apply(lambda grp: grp[~grp.index.duplicated(keep='first')])\
    .reset_index(level=0, drop=True)

然后打印的df2是:

        Date      Time              DatTim
ID                                        
12  2012-1-1  00:01:00 2012-01-01 00:01:00
13  2012-1-1  00:01:30 2012-01-01 00:01:30
12  2012-1-1  00:05:10 2012-01-01 00:05:10
12  2012-1-1  00:10:00 2012-01-01 00:10:00

当然,在这种情况下,您也可以删除DatTim列。