Python 3.x 如何基于时间戳从数据帧中删除重复条目?
在这个任务中,我有一个带有时间戳的数据帧和一个服务消息,它是某个服务的请求。这个列在短时间内有多个相同消息的条目,因为消息一直在生成,直到服务被接受或拒绝。下面是示例数据帧-Python 3.x 如何基于时间戳从数据帧中删除重复条目?,python-3.x,pandas,dataframe,duplicates,timestamp,Python 3.x,Pandas,Dataframe,Duplicates,Timestamp,在这个任务中,我有一个带有时间戳的数据帧和一个服务消息,它是某个服务的请求。这个列在短时间内有多个相同消息的条目,因为消息一直在生成,直到服务被接受或拒绝。下面是示例数据帧- timestamp service message 2019-02-15 15:56:19 battery check 2019-02-15 15:56:34 battery check 2019-02-15 15:57:02 batter
timestamp service message
2019-02-15 15:56:19 battery check
2019-02-15 15:56:34 battery check
2019-02-15 15:57:02 battery check
2019-02-15 15:57:30 battery check
2019-02-15 15:57:54 battery check
2019-02-15 15:59:10 battery check
2019-02-15 17:05:03 battery check
2019-02-15 17:05:42 battery check
2019-02-15 17:06:40 no network available
2019-02-15 17:06:48 no network available
2019-02-15 17:06:58 no network available
2019-02-15 17:08:31 no network available
我想删除所有重复的,比如说在15分钟的时间范围内,这样就可以算作一个服务。
但简单的字符串检查不起作用,因为17:05:03
处的消息与之前的消息不同,因为存在一个多小时的差异。
有办法做到这一点吗
提前感谢。使用列服务消息
进行聚合:
与列
服务消息
一起用于聚合:
我们可以简单地使用
布尔掩蔽
删除重复项:
m1 = df['timestamp'].diff().le(pd.Timedelta(minutes=15))
m2 = df['service message'].duplicated() & \
df['service message'].eq(df['service message'].shift())
df = df[~(m1 & m2)]
详细信息:
print(m1)
0 False
1 True
2 True
3 True
4 True
5 True
6 False
7 True
8 True
9 True
10 True
11 True
Name: timestamp, dtype: bool
print(m2)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 False
9 True
10 True
11 True
Name: service message, dtype: bool
print(df)
timestamp service message
0 2019-02-15 15:56:19 battery check
6 2019-02-15 17:05:03 battery check
8 2019-02-15 17:06:40 no network available
结果:
print(m1)
0 False
1 True
2 True
3 True
4 True
5 True
6 False
7 True
8 True
9 True
10 True
11 True
Name: timestamp, dtype: bool
print(m2)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 False
9 True
10 True
11 True
Name: service message, dtype: bool
print(df)
timestamp service message
0 2019-02-15 15:56:19 battery check
6 2019-02-15 17:05:03 battery check
8 2019-02-15 17:06:40 no network available
我们可以简单地使用
布尔掩蔽
删除重复项:
m1 = df['timestamp'].diff().le(pd.Timedelta(minutes=15))
m2 = df['service message'].duplicated() & \
df['service message'].eq(df['service message'].shift())
df = df[~(m1 & m2)]
详细信息:
print(m1)
0 False
1 True
2 True
3 True
4 True
5 True
6 False
7 True
8 True
9 True
10 True
11 True
Name: timestamp, dtype: bool
print(m2)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 False
9 True
10 True
11 True
Name: service message, dtype: bool
print(df)
timestamp service message
0 2019-02-15 15:56:19 battery check
6 2019-02-15 17:05:03 battery check
8 2019-02-15 17:06:40 no network available
结果:
print(m1)
0 False
1 True
2 True
3 True
4 True
5 True
6 False
7 True
8 True
9 True
10 True
11 True
Name: timestamp, dtype: bool
print(m2)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 False
9 True
10 True
11 True
Name: service message, dtype: bool
print(df)
timestamp service message
0 2019-02-15 15:56:19 battery check
6 2019-02-15 17:05:03 battery check
8 2019-02-15 17:06:40 no network available
这回答了你的问题吗?另一个问题这能回答你的问题吗?另一个问题