日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】电商用户复购数据实战:图解Pandas的移动函数shift

發布時間:2025/3/12 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】电商用户复购数据实战:图解Pandas的移动函数shift 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號:尤而小屋
作者:Peter
編輯:Peter

本文主要介紹的是pandas中的一個移動函數:shift。最后結合一個具體的電商領域中用戶的復購案例來說明如何使用shift函數。

這個案例綜合性很強,除了需要掌握shift函數,你還會復習到以下pandas中的多個函數使用技巧,建議認真閱讀、理解并收藏,歡迎點贊呀~

  • 分組統計:groupby

  • 過濾篩選數據:query

  • 排序函數:sort_values

  • 合并函數:concat

  • 字段重命名:rename

  • 缺失值刪除:dropna

  • 寶藏函數:apply

Pandas連載

Pandas文章連載系列已經到了第20篇,主要分為3類:

基礎部分:1-16篇,主要是介紹Pandas中基礎和常用操作,比如數據創建、檢索查詢、排名排序、缺失值/重復值處理等

進階部分:第17篇開始講解Pandas中的高級操作方法;后續主要是以時間序列相關為主

對比SQL,學習Pandas:將SQL和Pandas的操作對比起來進行學習

14種方式,34個案例:對比SQL,學習Pandas操作

參數說明

DataFrame.shift(periods=1,?freq=None,?axis=0,?fill_value=<no_default>)
  • periods:表示移動的幅度,可正可負;默認值是1,1就表示移動一次。注意這里移動的都是數據,而索引是不移動的,移動之后沒有對應值的,就賦值為NaN

  • freq:DateOffset, timedelta, or time rule string,可選參數,默認值為None,只適用于時間序列。如果這個參數存在,那么會按照參數值移動時間索引,而數據值沒有發生變化。

  • axis:表示按照哪個軸移動。axis=0表示index,橫軸;axis=1表示columns,縱軸

  • fill_value:表示當我們數據發生了移動之后,產生的缺失值用什么數據填充。如果是數值型的缺失值,用np.nan;如果是時間類型的缺失值,用NaT(not a time)

模擬數據

模擬了兩份數據,其中一份和時間相關。

import?pandas?as?pd import?numpy?as?np

另一份是和時間相關的:

參數periods

表示每次移動的幅度

可以看到默認情況下,shift函數是在行方向上移動一個單位

參數axis

用來表示在哪個方向上進行移動,上面的例子默認是在axis=0,或者表示成:axis="index"

如果我們想在列方向上移動,可以使用axis=1或者axis="columns"

同時移動的幅度是可正可負的:

參數fill_value

移動之后缺失值的填充數據

參數freq

表示移動的頻率,專門用于時間序列的移動中

頻率

時間序列變化頻率有間隔相同的,也有不同的。許多字符串別名被賦予有用的普通時間序列頻率。我們將這些別名稱為偏移別名。上面的shift函數中使用的就是這些別名,具體如下表所示:

別名描述
B工作日頻率
C自定義工作日頻率
D日歷日頻率
W每周頻率
M每月最后一個日歷日
SM每半個月最后一個日歷日(15日和月末)
BM每月最后一個工作日
CBM自定義每月最后一個工作日
MS每月第一個日歷日
SMS每半月第一個日歷日(第1和第15)
BMS每月第一個工作日
CBMS自定義每月第一個工作日
Q每季度最后一個月的最后一個日歷日
BQ每季度最后一個月的最后一個工作日
QS每季度最后一個月的第一個日歷日
BQS每季度最后一個月的第一個工作日
A, Y每年的最后一個日歷日
BA, BY每年的最后一個工作日
AS, YS每年的第一個日歷日
BAS, BYS每年的第一個工作日
BH工作日按“時”計算頻率
H每小時頻率
T, min每分鐘頻率
S每秒頻率
L, ms毫秒頻率
U, us微秒頻率
N納秒頻率

電商用戶復購數據實戰

什么是用戶的復購周期

在這里我們結合一個電商銷售數據來感受下shift函數的使用。我們有一份客戶和購買時間的數據,現在想統計每位用戶在今年的平均復購周期和全部用戶的平均復購周期。

  • 每位用戶的平均復購周期:每兩個復購時間之間的天數之和 / 用戶總復購次數

  • 全部用戶的平均復購周期:全部用戶的平均復購周期之和 / 總復購用戶數

通過一個例子來解釋用戶的平均復購周期,假設某位用戶購買情況如下:

張三用戶的復購間隔分別為:6(1號和7號的間隔),3(7號和10號),10,8;也就是相鄰兩次購買時間之間的間隔。

那么張三的平均復購周期:(6+3+8+10)/ 4 = 6.75

模擬數據

模擬了一份電商數據,多位用戶購買了一次或者多次:

下面通過Pandas來求解每位用戶的平均復購周期和全部的平均復購周期

確定哪些用戶存在復購行為

復購的用戶指的是:在統計時間范圍內,存在多次購買的用戶。所以我們首先找到那些至少購買兩次的用戶

統計發現:小王同學只購買了一次,沒有復購行為

篩選出復購用戶:

從原始數據中提取出復購用戶的數據

根據每位用戶的購買時間來升序排列

#?姓名的升序或者降序不重要,重要的是第二個字段-時間,一定要是升序 df3?=?df2.sort_values(["姓名","時間"],ascending=[True,True]).reset_index(drop=True)?df3

根據每位復購用戶的數據移動一個單位

在行方向上移動一個單位:

df4?=?df3.groupby("姓名").shift(1).rename(columns={"時間":"時間1"})??#?改下名字,避免重復 df4

拼接數據

將排序后的df3和我們根據df3平移后的數據在列方向上拼接起來:

字段時間1相當于每個購買時間的前一個購買時間點

df5?=?pd.concat([df3,df4],axis=1) df5.head(10)??#?查看前10行

上面的數據框中:

  • 時間: 可以看做是我們的本次購買時間

  • 時間1:上次購買時間。每個用戶的第一次購買時間是不存在上次購買時間,所以顯示為NaT

將NaT數據刪除

使用dropna函數來刪除缺失值的數據

df6?=?df5.dropna().reset_index(drop=True) df6

求出復購時間間隔

兩個字段:時間時間1的差值,就是每位用戶的復購時間間隔,可能存在多個

查看數據的字段類型,我們發現間隔這個字段是一個timedelta64[ns]的類型

我們直接通過apply函數來獲取timedelta64[ns]的days屬性,也就是對一個的天數

統計每個復購用戶的復購總天數和總次數

df7?=?df6.groupby("姓名").agg({"天":"sum","間隔":"count"}).reset_index().rename(columns={"間隔":"復購次數"}) df7

求出每位用戶平均復購周期

全部用戶的平均復購周期

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯黃海廣老師《機器學習課程》課件合集 本站qq群851320808,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【Python】电商用户复购数据实战:图解Pandas的移动函数shift的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。