每 5 分钟删除重复项 [关闭]

Posted

技术标签:

【中文标题】每 5 分钟删除重复项 [关闭]【英文标题】:Removing duplicates every 5 minutes [closed] 【发布时间】:2019-06-13 10:38:28 【问题描述】:

我正在尝试从数据集中删除每 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 时间范围内第二次出现。

我正在使用 pandas 来清理当前数据集。

感谢任何帮助!

【问题讨论】:

【参考方案1】:

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

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

然后,假设ID 是一个“普通”列(不是索引), 你应该打电话:

groupbyDatTim 列上,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 列。

【讨论】:

以上是关于每 5 分钟删除重复项 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用laravel从大表中删除重复项[关闭]

从数据表中删除重复项[关闭]

使用 std::map 从数组中删除重复项

如何在不使用 JCL 中的 XSUM 的情况下从输入文件中删除重复项并将重复项写入文件? [关闭]

从 C++ 中的数组中删除重复项 [关闭]

每天一题LeetCode 26. 删除排序数组中的重复项