使用groupby进行渠道限制性分析

时间:2018-07-25 02:20:33

标签: python python-3.x pandas numpy pandas-groupby

我正在尝试创建具有以下条件的渠道分析。我想知道有多少人进入首页进行搜索(进行搜索的人数/进行家庭搜索的人数)以及从进行搜索的商品中购买商品的人数,但是必须是那些首先成为家(活动)的人所必需的。

在此之后,我想添加一个新条件,即每个人都必须在一个小时内完成漏斗(或直到每个人完成下一步)。

例如:

df

id  day   time   event
 1   20  16:00    home
 1   20  16:20  search
 1   20  16:25     buy
 2   20  17:00    home
 2   20  17:02    home
 2   20  17:03    home
 2   20  17:06  search
 2   20  17:06  search
 3   21   9:00  search
 4   20   8:00    home
 4   21   8:00  search
 5   22   7:00    home
 5   22   7:15     buy

结果必须是

  result

  home   4
search   3
   buy   1

结果的解释:home:id1,id2,id4,id5是使程序成为home的第一步的id(因此为什么4在home)                      搜索:id1,id2,id4是将第一个住所作为事件并且还可以在不到一个小时的时间内进行搜索的ID                        购买:只需id1,即可在不到一个小时的时间内完成渠道的购买

1 个答案:

答案 0 :(得分:0)

我使用了groupby和str.contains来匹配您的事件并对其进行计数。希望这会帮助您解决问题的第一部分。

首先,我创建了一个示例数据框

df = pd.DataFrame({'id': [1, 1, 1, 2, 3, 3, 3, 3], 'event': ['home', 
    'home', 'search', 'home', 'home', 'search', 'search', 'buy']})
df = df.set_index('id')


     event
id        
1     home
1     home
1   search
2     home
3     home
3   search
3   search
3      buy

然后我们将ID分组,并用

df = df.groupby(level=0).sum()

然后我们可以使用str.contains来匹配您的案例

ps = ['home', 'homesearch', r'home(search)+buy']
print(pd.DataFrame([df.event.str.contains(p).sum() for p in ps], index=ps))

这将创建(您可以将任意使用的索引用作我刚刚使用搜索字符串的索引)

                  0
home              3
homesearch        2
home(search)+buy  1

请注意,在购买前发生多次搜索时,我必须使用正则表达式来匹配更复杂的情况。