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

这回答了你的问题吗?另一个问题这能回答你的问题吗?另一个问题