【发布时间】:2020-12-18 19:30:56
【问题描述】:
我有两个数据框。其中一个是用户在网店中的搜索查询(102377 行),另一个是用户在搜索之外的点击次数(8004 行)。
queries:
index term timestamp
...
10 tight 2018-09-27 20:09:23
11 differential pressure 2018-09-27 20:09:30
12 soot pump 2018-09-27 20:09:32
13 gas pressure 2018-09-27 20:09:46
14 case 2018-09-27 20:11:29
15 backpack 2018-09-27 20:18:35
...
clicks
index term timestamp artnr
...
245 soot pump 2018-09-27 20:09:25 9150.0
246 dungarees 2018-09-27 20:10:38 7228.0
247 db23 2018-09-27 20:10:40 7966.0
248 db23 2018-09-27 20:10:55 7971.0
249 sealing blister 2018-09-27 20:12:05 7971.0
250 backpack 2018-09-27 20:18:40 8739.0
...
我想要做的是加入查询中的点击。如果 queries.term 等于 clicks.term 并且 clicks.timestamp - queries.timestamp 之间的差值小于 10 和大于 0 秒,则应将查询数据帧的 term 替换为 clicks 数据帧的 artnr,使其看起来像:
queries:
index term timestamp
...
10 tight 2018-09-27 20:09:23
11 differential pressure 2018-09-27 20:09:30
12 9150.0 2018-09-27 20:09:32
13 gas pressure 2018-09-27 20:09:46
14 case 2018-09-27 20:11:29
15 8739.0 2018-09-27 20:18:35
...
我的第一个方法如下:
df_Q['term'] = np.where(((((df_CS.timestamp-df_Q.timestamp).dt.total_seconds() <= 10.0) &
(df_CS.timestamp-df_Q.timestamp).dt.total_seconds() >= 0) &
(df_CS.term.str == df_Q.term.str)), df_CS['artnr'], df_CS['term'])
但这只是产生了以下错误:
ValueError:操作数无法与形状一起广播 (102377,) (8004,) (8004,)
有没有人知道如何通过左连接或其他解决方案来解决这个问题?
【问题讨论】:
-
对于烟灰泵,点击次数为 7 秒
before查询。但是对于背包,点击是 5 秒after查询。你想要之前还是之后或两者兼而有之?
标签: python pandas dataframe left-join data-mining