Pandas Shift函數(shù)的基礎(chǔ)入門學(xué)習(xí)筆記
Pandas Shift函數(shù)基礎(chǔ)
在使用Pandas的過程中,有時(shí)會(huì)遇到shift函數(shù),今天就一起來徹底學(xué)習(xí)下。先來看看幫助文檔是怎么說的:
>>> import pandas >>> help(pandas.DataFrame.shift) Help on function shift in module pandas.core.frame: shift(self, periods=1, freq=None, axis=0) Shift index by desired number of periods with an optional time freq Parameters ---------- periods : int Number of periods to move, can be positive or negative freq : DateOffset, timedelta, or time rule string, optional Increment to use from the tseries module or time rule (e.g. 'EOM'). See Notes. axis : {0 or 'index', 1 or 'columns'} Notes ----- If freq is specified then the index values are shifted but the data is not realigned. That is, use freq if you would like to extend the index when shifting and preserve the original data. Returns ------- shifted : DataFrame
該函數(shù)主要的功能就是使數(shù)據(jù)框中的數(shù)據(jù)移動(dòng),若freq=None時(shí),根據(jù)axis的設(shè)置,行索引數(shù)據(jù)保持不變,列索引數(shù)據(jù)可以在行上上下移動(dòng)或在列上左右移動(dòng);若行索引為時(shí)間序列,則可以設(shè)置freq參數(shù),根據(jù)periods和freq參數(shù)值組合,使行索引每次發(fā)生periods*freq偏移量滾動(dòng),列索引數(shù)據(jù)不會(huì)移動(dòng)。
參數(shù)詳解:
- period:表示移動(dòng)的幅度,可以是正數(shù),也可以是負(fù)數(shù),默認(rèn)值是1,1就表示移動(dòng)一次,注意這里移動(dòng)的都是數(shù)據(jù),而索引是不移動(dòng)的,移動(dòng)之后沒有對(duì)應(yīng)值的,就賦值為NaN。
- freq: DateOffset, timedelta, or time rule string,可選參數(shù),默認(rèn)值為None,只適用于時(shí)間序列,如果這個(gè)參數(shù)存在,那么會(huì)按照參數(shù)值移動(dòng)時(shí)間索引,而數(shù)據(jù)值沒有發(fā)生變化。
- axis: {0, 1, ‘index', ‘columns'},表示移動(dòng)的方向,如果是0或者'index'表示上下移動(dòng),如果是1或者'columns',則會(huì)左右移動(dòng)。
先來看一下一些簡(jiǎn)單的示例:
1、非時(shí)間索引下period的設(shè)置
假設(shè)存在一個(gè)DataFrame數(shù)據(jù)df:
index value1 A 0 B 1 C 2 D 3
如果執(zhí)行以下代碼 df.shift() 就會(huì)變成如下:
index value1 A NaN B 0 C 1 D 2
執(zhí)行 df.shift(2) 就會(huì)得到:
index value1 A NaN B NaN C 0 D 1
執(zhí)行 df.shift(-1) 會(huì)得到:
index value1 A 1 B 2 C 3 D NaN
注意,shift移動(dòng)的是整個(gè)數(shù)據(jù),如果df有如下多列數(shù)據(jù):
AA BB CC DD a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15
執(zhí)行 df.shift(2) 的數(shù)據(jù)為:
AA BB CC DD a NaN NaN NaN NaN b NaN NaN NaN NaN c 0.0 1.0 2.0 3.0 d 4.0 5.0 6.0 7.0
如果只想移動(dòng)df中的某一列數(shù)據(jù),則需要這樣操作: df['DD']= df['DD'].shift(1)
執(zhí)行后的數(shù)據(jù)為:
AA BB CC DD a 0 1 2 NaN b 4 5 6 NaN c 8 9 10 11 d 12 13 14 15
2、時(shí)間索引下freq 參數(shù)設(shè)置
假設(shè)存在如下DataFrame的df:
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['AA','BB','CC','DD'],index =pd.date_range('2012-06-01','2012-06-04'))
AA BB CC DD 2012-06-01 0 1 2 3 2012-06-02 4 5 6 7 2012-06-03 8 9 10 11 2012-06-04 12 13 14 15
執(zhí)行 df.shift(freq=datetime.timedelta(1)) 后:
AA BB CC DD 2012-06-02 0 1 2 3 2012-06-03 4 5 6 7 2012-06-04 8 9 10 11 2012-06-05 12 13 14 15
執(zhí)行 df.shift(freq=datetime.timedelta(-2)) 后:
AA BB CC DD 2012-05-30 0 1 2 3 2012-05-31 4 5 6 7 2012-06-01 8 9 10 11 2012-06-02 12 13 14 15
可以看到索引直接變了。
3、axis軸向設(shè)置
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['AA','BB','CC','DD'],index =['a','b','c','d']) df Out[1]: AA BB CC DD a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15 #當(dāng)period為正時(shí),默認(rèn)是axis = 0軸的設(shè)定,向下移動(dòng) df.shift(2) Out[2]: AA BB CC DD a NaN NaN NaN NaN b NaN NaN NaN NaN c 0.0 1.0 2.0 3.0 d 4.0 5.0 6.0 7.0 #當(dāng)axis=1,沿水平方向進(jìn)行移動(dòng),正數(shù)向右移,負(fù)數(shù)向左移 df.shift(2,axis = 1) Out[3]: AA BB CC DD a NaN NaN 0.0 1.0 b NaN NaN 4.0 5.0 c NaN NaN 8.0 9.0 d NaN NaN 12.0 13.0 #當(dāng)period為負(fù)時(shí),默認(rèn)是axis = 0軸的設(shè)定,向上移動(dòng) df.shift(-1) Out[4]: AA BB CC DD a 4.0 5.0 6.0 7.0 b 8.0 9.0 10.0 11.0 c 12.0 13.0 14.0 15.0 d NaN NaN NaN NaN
pandas 中上下兩行相減(隔行相減) -- shift函數(shù)的使用
最近使用pandas處理數(shù)據(jù),需求是想相鄰兩行上下相減,查API發(fā)現(xiàn)shift函數(shù),很靈活,。你也可以隔任意行相減。
p['xx_1'] = p["xx"].shift(1)
上面得到的就是xx字段向下移動(dòng)一行的結(jié)果,和之前相比向下移動(dòng)一行,你可以設(shè)置為任意行,也可是向上向下
p['xx'] - p["xx_1"]
這就是前后兩行的差值,很方便,Pandas很強(qiáng)大
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python實(shí)現(xiàn)柵欄加解密 支持密鑰加密
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)柵欄加解密,支持密鑰加密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03Python 將字符串轉(zhuǎn)換為列表的7種方法匯總
這篇文章主要介紹了Python 將字符串轉(zhuǎn)換為列表的7種方法匯總,在本文中,我們將嘗試將給定的字符串轉(zhuǎn)換為列表,其中根據(jù)用戶的選擇,遇到空格或任何其他特殊字符,為此,我們?cè)趕tring中使用split()方法,需要的朋友可以參考下2023-11-11Pytest參數(shù)化parametrize使用代碼實(shí)例
這篇文章主要介紹了Pytest參數(shù)化parametrize使用代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02使用python?matplotlib?contour畫等高線圖的詳細(xì)過程講解
最近學(xué)習(xí)了matplotlib中的高線圖的繪制,所以下面這篇文章主要給大家介紹了關(guān)于使用python?matplotlib?contour畫等高線圖的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08實(shí)例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請(qǐng)求的用法
SocketServer模塊中帶有很多實(shí)現(xiàn)服務(wù)器所能夠用到的socket類和操作方法,下面我們就來以實(shí)例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請(qǐng)求的用法:2016-06-06解決Django Static內(nèi)容不能加載顯示的問題
今天小編就為大家分享一篇解決Django Static內(nèi)容不能加載顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07詳解Python 實(shí)現(xiàn) ZeroMQ 的三種基本工作模式
ZMQ是一個(gè)簡(jiǎn)單好用的傳輸層,像框架一樣的一個(gè) socket library,他使得 Socket 編程更加簡(jiǎn)單、簡(jiǎn)潔和性能更高。 ,這篇文章主要介紹了Python 實(shí)現(xiàn) ZeroMQ 的三種基本工作模式,需要的朋友可以參考下2020-03-03淺談python裝飾器探究與參數(shù)的領(lǐng)取
下面小編就為大家分享一篇淺談python裝飾器探究與參數(shù)的領(lǐng)取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12