每 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
是一个“普通”列(不是索引),
你应该打电话:
groupby
在 DatTim
列上,5 min
频率。
对每个组应用drop_duplicates
,subset
仅包括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 分钟删除重复项 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章