<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用Python實(shí)現(xiàn)數(shù)據(jù)偏移

          共 1420字,需瀏覽 3分鐘

           ·

          2021-04-28 08:34

          現(xiàn)在有如下這么一張表,這張表存儲(chǔ)了每個(gè)uid在不同周(w)的訂單情況。我們想知道每個(gè)用戶在不同周內(nèi)消費(fèi)頻次的變化情況。消費(fèi)頻次變化的標(biāo)準(zhǔn)就是這周訂單數(shù)和上周訂單數(shù)的相對(duì)變化,如果這周訂單比上周增加了,就說(shuō)明消費(fèi)頻次提高了,反之則說(shuō)明消費(fèi)頻次降低了。

          要實(shí)現(xiàn)上面的需求,其實(shí)只需要新增一列,這一列用來(lái)存儲(chǔ)每個(gè)uid在上一周期的訂單情況,然后將兩列進(jìn)行做差,差的結(jié)果就是每個(gè)uid消費(fèi)頻次的變化。具體結(jié)果如下:

          上面這個(gè)結(jié)果該如何實(shí)現(xiàn)呢?也就是如何讓數(shù)據(jù)進(jìn)行上下偏移呢?借助的就是Python中的shift函數(shù),我們這一節(jié)就講講shift是怎么使用的。shift的功能是對(duì)數(shù)據(jù)進(jìn)行偏移,該函數(shù)的具體參數(shù)如下:

          df.shift(periods=1, freq=None, axis=0)

          periods為偏移的幅度;freq只適用于時(shí)間索引的偏移,是對(duì)索引的偏移,而值不發(fā)生變化;axis用來(lái)指明是橫向偏移還是縱向偏移,當(dāng)axis=0時(shí)表示縱向偏移,默認(rèn)就是縱向偏移,當(dāng)要縱向偏移時(shí),axis參數(shù)可以省略不寫。當(dāng)axis=1時(shí)表示橫向偏移。如果periods為正,則表示向下/右偏移,如果peeriods為負(fù),則表示向上/左偏移。接下來(lái)我們看一些具體實(shí)例:

          df.shift(1)

          運(yùn)行上面的代碼,所有的數(shù)據(jù)向下偏移一行,具體結(jié)果如下:

          df.shift(-1)

          運(yùn)行上面的代碼,所有的數(shù)據(jù)向上偏移一行,具體結(jié)果如下:

          df.shift(1,axis = 1)

          運(yùn)行上面的代碼,所有的數(shù)據(jù)向右偏移一列,具體結(jié)果如下:

          df.shift(-1,axis = 1)

          運(yùn)行上面的代碼,所有的數(shù)據(jù)向左偏移一列,具體結(jié)果如下:

          了解完了shift用法以后我們來(lái)看下我們開(kāi)頭那個(gè)需求該怎么做呢?新增加一列l(wèi)ast_sales,并給其賦值為sales列,然后將last_sales這一列向上偏移一行。實(shí)現(xiàn)代碼如下:

          df["last_sales"] = df["sales"]
          df["last_sales"] = df["last_sales"].shift(1)
          df

          運(yùn)行上面代碼,會(huì)得到每一行的sales_s與他的上一行的sales,這個(gè)sales不一定是他自己上一個(gè)周期的sales,比如第一個(gè)uid=2的上一個(gè)周期應(yīng)該是0,但是這里面卻是4:

          很明顯,上面的結(jié)果并非我們想要的結(jié)果,我們想要的是每個(gè)uid內(nèi)的上一個(gè)周期的sales,而非每一行sales對(duì)應(yīng)的上一行的sales,那怎么辦呢?方法就是在組內(nèi)進(jìn)行shift,也就是與groupby 進(jìn)行組合使用,先對(duì)uid進(jìn)行g(shù)roupby,然后再進(jìn)行shift偏移,具體代碼如下:

          df["last_sales"] = df.groupby("uid")["sales"].shift(1).fillna(0)
          df

          最后運(yùn)行上面的代碼,就得到了我們開(kāi)頭想要的結(jié)果,即每個(gè)uid當(dāng)期的sales和他自己上一期的sales,具體結(jié)果如下:

          以上就是關(guān)于shift函數(shù)的使用情況。

          瀏覽 102
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  9.1人成人免费视频网站 | www.最全三级在线 | 裸体美女av | 国产骚逼被操 | 先锋影音男人资源 |