解决以下问题的最佳方法是什么:
我有一个Pandas数据框,如下所示:
Index Date Name Product
01 2017-09-6 18:01:15 Mike xxx
02 2017-09-6 18:02:35 Mike yyy
03 2017-09-6 18:07:25 Mike xxx
04 2017-09-6 18:09:35 Mike yyy
05 2017-09-6 18:09:39 John yyy
06 2017-09-6 18:23:15 Mike xxx
07 2017-09-6 18:25:35 Mike xxx
08 2017-09-6 18:50:39 John yyy
09 2017-09-6 18:58:15 Mary xxx
10 2017-09-6 19:07:20 Mary xxx
11 2017-09-6 19:07:25 Mike zzz
12 2017-09-6 19:09:09 Mary xxx
13 2017-09-6 21:03:45 Mary zzz
14 2017-09-6 21:12:15 Mike yyy
15 2017-09-6 21:20:15 Mike yyy
此数据框表示数据库中多个用户的产品搜索。 我现在要做的是创建一个数据框,在一定时间内过滤掉同一用户在同一产品上的多次搜索(比如说15分钟) - 换句话说:在第一次搜索后的15分钟内每隔一次搜索一次搜索会议名称和产品标准应删除。
结果数据框应如下所示:
Index Date Name Product
01 2017-09-6 18:01:15 Mike xxx
02 2017-09-6 18:02:35 Mike yyy
05 2017-09-6 18:09:39 John yyy
06 2017-09-6 18:23:15 Mike xxx
08 2017-09-6 18:50:39 John yyy
09 2017-09-6 18:58:15 Mary xxx
11 2017-09-6 19:07:25 Mike zzz
13 2017-09-6 21:03:45 Mary zzz
14 2017-09-6 21:12:15 Mike yyy
在Python中解决这个问题的最佳方法是什么?
THX& BR bdriven
答案 0 :(得分:1)
我认为您需要遍历Date系列以创建过滤器。
(假设您的每个[名称,产品]组的日期列已经按升序排序。)
def date_filter(s):
s = s.values
anchor = s[0]
res = [False] * len(s)
res[0] = True
for idx, x in enumerate(s):
if (x - anchor) / np.timedelta64(1, 'm') > 15:
res[idx] = True
anchor = x
return res
df[ df.groupby(['Name','Product'])['Date'].transform(date_filter) ]