【发布时间】:2017-12-01 22:15:59
【问题描述】:
我有两个熊猫数据框:
自动化
index id user_id merchant_id marketing_email_id start_date end_date email_status created_at
0 133198 133199 10939 88 681 2016-06-29 2016-07-06 1 2016-06-29 11:26:46
1 578787 578788 226281 745 1636 2017-09-14 2017-09-21 0 2017-09-14 12:32:32
2 222373 222374 86557 37 1274 2016-12-31 2017-01-07 0 2016-12-31 13:31:18
3 279039 279040 92109 669 1470 2017-03-01 2017-03-15 0 2017-03-01 12:09:27
4 33913 33914 25422 155 652 2016-02-22 2016-02-27 1 2016-02-22 12:45:15
5 423084 423085 29820 509 2067 2017-06-19 2017-06-20 1 2017-06-19 10:00:43
6 592752 592753 368756 1310 2827 2017-09-21 2017-09-28 0 2017-09-21 06:03:49
7 660899 660900 13007 206 2189 2017-10-19 2017-10-26 0 2017-10-19 07:47:48
8 491336 491337 125266 745 1626 2017-07-26 2017-08-02 0 2017-07-26 11:31:28
9 424653 424654 115139 687 1832 2017-06-20 2017-06-27 0 2017-06-20 07:33:03
访问
user_id merchant_id visit_verified
created_at
2015-02-09 10:57:05 57 29 1
2015-02-09 14:23:12 58 30 1
2015-02-09 14:29:14 58 30 1
2015-02-09 14:51:26 59 30 1
2015-02-09 16:14:50 60 29 1
2015-02-09 16:17:22 61 30 1
2015-02-09 17:44:20 62 30 1
2015-02-09 17:46:57 63 30 1
2015-02-09 17:53:26 60 29 1
2015-02-09 18:03:40 64 29 1
我正在尝试关联自动表中的每一行,如果访问表中有相应的行,其中 created_at 在 start_date 和 end_date 之间。
以下是用于计算它的代码:
automate.iloc[1,"visit"] = visits[visits.user_id.isin([automate.iloc[1].user_id])][automate.iloc[1].start_date:automate.iloc[1].end_date].index.values
在为自动表中的所有 700k 行 复制上述内容时会出现问题。 遍历自动表中的每一行似乎非常慢。我使用了 df.iterrows 函数,但无法为每一行赋值。
是否有更快的方法可以用于上述逻辑?
编辑 1: 预期的输出应该是
index id user_id merchant_id marketing_email_id start_date end_date email_status created_at Visit
0 133198 133199 10939 88 681 2016-06-29 2016-07-06 1 2016-06-29 11:26:46 NaN
1 578787 578788 226281 745 1636 2017-09-14 2017-09-21 0 2017-09-14 12:32:32 NaN
2 222373 222374 86557 37 1274 2016-12-31 2017-01-07 0 2016-12-31 13:31:18 NaN
3 279039 279040 92109 669 1470 2017-03-01 2017-03-15 0 2017-03-01 12:09:27 NaN
4 33913 33914 25422 155 652 2016-02-22 2016-02-27 1 2016-02-22 12:45:15 NaN
如果给定的用户在开始-结束日期内访问,这里的 NaN 值可能会或可能不会填充时间戳值。
【问题讨论】:
-
你能提供预期的输出吗?
-
添加了预期的输出。请看