利用Python实现数据偏移
總第190篇/張俊紅
現在有如下這么一張表,這張表存儲了每個uid在不同周(w)的訂單情況。我們想知道每個用戶在不同周內消費頻次的變化情況。消費頻次變化的標準就是這周訂單數和上周訂單數的相對變化,如果這周訂單比上周增加了,就說明消費頻次提高了,反之則說明消費頻次降低了。
要實現上面的需求,其實只需要新增一列,這一列用來存儲每個uid在上一周期的訂單情況,然后將兩列進行做差,差的結果就是每個uid消費頻次的變化。具體結果如下:
上面這個結果該如何實現呢?也就是如何讓數據進行上下偏移呢?借助的就是Python中的shift函數,我們這一節就講講shift是怎么使用的。shift的功能是對數據進行偏移,該函數的具體參數如下:
df.shift(periods=1,?freq=None,?axis=0)periods為偏移的幅度;freq只適用于時間索引的偏移,是對索引的偏移,而值不發生變化;axis用來指明是橫向偏移還是縱向偏移,當axis=0時表示縱向偏移,默認就是縱向偏移,當要縱向偏移時,axis參數可以省略不寫。當axis=1時表示橫向偏移。如果periods為正,則表示向下/右偏移,如果peeriods為負,則表示向上/左偏移。接下來我們看一些具體實例:
df.shift(1)運行上面的代碼,所有的數據向下偏移一行,具體結果如下:
df.shift(-1)運行上面的代碼,所有的數據向上偏移一行,具體結果如下:
df.shift(1,axis?=?1)運行上面的代碼,所有的數據向右偏移一列,具體結果如下:
df.shift(-1,axis?=?1)運行上面的代碼,所有的數據向左偏移一列,具體結果如下:
了解完了shift用法以后我們來看下我們開頭那個需求該怎么做呢?新增加一列last_sales,并給其賦值為sales列,然后將last_sales這一列向上偏移一行。實現代碼如下:
df["last_sales"]?=?df["sales"] df["last_sales"]?=?df["last_sales"].shift(1) df運行上面代碼,會得到每一行的sales_s與他的上一行的sales,這個sales不一定是他自己上一個周期的sales,比如第一個uid=2的上一個周期應該是0,但是這里面卻是4:
很明顯,上面的結果并非我們想要的結果,我們想要的是每個uid內的上一個周期的sales,而非每一行sales對應的上一行的sales,那怎么辦呢?方法就是在組內進行shift,也就是與groupby 進行組合使用,先對uid進行groupby,然后再進行shift偏移,具體代碼如下:
df["last_sales"]?=?df.groupby("uid")["sales"].shift(1).fillna(0) df最后運行上面的代碼,就得到了我們開頭想要的結果,即每個uid當期的sales和他自己上一期的sales,具體結果如下:
以上就是關于shift函數的使用情況。
你還可以看:
最近瘋傳的SIR傳染病模型是什么?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的利用Python实现数据偏移的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 妖狐第九层怎么过
- 下一篇: 如何利用Python制作可以动的动态图表