[英]Sum of sales for last 30days per user with Python
我正在嘗試獲取名為“sales_30d_lag”的新 df 列,其中每個 user_id 自上次購買日期起過去 30 天的總銷售額。 我知道如何獲得 30 天的延遲,請參見下面的代碼,但這不能解決問題,因為它是固定日期。
用戶身份 | 購買日期 | 產品 | 銷售量 |
---|---|---|---|
1 | 21 年 1 月 1 日 | 一個 | 1 |
2 | 21 年 1 月 1 日 | 一個 | 1 |
max_date = max(df['purchase_date'])
df['30d_lag']= pd.to_datetime(df['max_date']) - pd.to_timedelta(30)
我也使用了不同的方法,但這似乎也不起作用。 任何想法如何獲得這個專欄?
start_date = pd.to_datetime(df['max_date'])
end_date = start_date - pd.to_timedelta(30)
df_30d_lag = df[df['purchase_date'].between(start_date, end_date)].groupby('user_id').agg({'sales':'sum'}).rename(columns={'sales':'sales_30d_lag'}).reset_index()
您可以結合使用isin
和pd.date_range
函數。
這是一個例子:
start_date = pd.to_datetime(df['max_date'])
end_date = start_date - pd.to_timedelta(30)
30_d_df = df[df['datetime_col'].isin(pd.date_range(start_date, end_date, freq='D'))]
# Once the filtration is complete you can use your normal groupby function
30_d_df.groupby('user_id').agg({'sales':'sum'})
注意:要讓這個 function 工作,您需要在datetime_col
中有 datetime_col(如果它已經不在其中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.