我正在尝试从数据集中删除每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中再次出现。
我正在使用熊猫清理当前数据集。
感谢您的帮助!
答案 0 :(得分:0)
从添加 DatTim 列(类型为 DateTime )开始,获取源 日期和时间的数据:
df['DatTim'] = pd.to_datetime(df.Date + ' ' + df.Time)
然后,假设ID
是“普通”列(而不是索引),
您应该致电:
groupby
列上的{li> 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
列。