我試圖創建一個隊列分析,顯示隨着時間的推移獨特購買的發展,特殊條件是隊列組應該只包含在第一個訂單上使用折扣券的用戶。隊列組條件
我的數據集是這樣的:
import numpy as np
import pandas as pd
data_set = list(data_set)
df = pd.DataFrame(data_set)
df['OrderPeriod'] = df.submitted_at.apply(lambda x: x.strftime('%Y-%m'))
df.set_index('submitted_by_id', inplace=True)
df['CohortGroup'] = df.groupby(level=0)['submitted_at'].min().apply(lambda x: x.strftime('%Y, %m'))
df.reset_index(inplace=True)
grouped = df.groupby(['CohortGroup', 'OrderPeriod'])
cohorts = grouped.agg({
'submitted_by_id': pd.Series.nunique,
'id': pd.Series.nunique,
})
cohorts.rename(columns={'id': 'TotalOrdersInPeriod', 'submitted_by_id': 'TotalUsers'}, inplace=True);
cohorts = cohorts.groupby(level=0).apply(cohort_period)
cohorts.reset_index(inplace=True)
cohorts.set_index(['CohortGroup', 'CohortPeriod'], inplace=True)
cohort_group_size = cohorts['TotalUsers'].groupby(level=0).first()
cohorts['TotalOrders'] = cohorts.groupby(level=0).TotalOrdersInPeriod.cumsum()
total_buys = cohorts['TotalOrders'].unstack(0).divide(cohort_group_size, axis=1)
這將顯示我的同夥這樣
CohortGroup 2015, 01 2015, 02
CohortPeriod
1 1 1
2 1.5
:
╔════╦═════════════════╦══════════════╦═══════════╗
║ id ║ submitted_by_id ║ submitted_at ║ coupon_id ║
╠════╬═════════════════╬══════════════╬═══════════╣
║ 1 ║ 1 ║ 2015-01-01 ║ ║
║ 2 ║ 2 ║ 2015-01-02 ║ 1 ║
║ 3 ║ 1 ║ 2015-02-02 ║ 1 ║
║ 4 ║ 3 ║ 2015-02-02 ║ ║
║... ║ ... ║ ... ║ ... ║
╚════╩═════════════════╩══════════════╩═══════════╝
所以,我可以過這樣整個數據集創建隊列分析
所以我想要的是以某種方式限制我的隊列組到那些第一次訂購的客戶pon_id。
所以我得到的表是這樣的
CohortGroup 2015, 01 2015, 02
CohortPeriod
1 1 NaN
2 1
如何去與?
幸得http://www.gregreda.com/2015/08/23/cohort-analysis-with-python/
看起來很有希望,我很期待嘗試它,當我開始工作。 –
我不完全確定你在最後兩行中做了什麼,你不使用你的coupon_customers,我也無法得到和你一樣的結果。 不過,我已經到了一個解決方案使用你的想法,將發佈多一點測試後,並將你的回答標記爲答案 –
對不起,忘了發佈最後一行 - 產生實際結果的那一行... – Stefan