中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Pandas中使用Shift函數

發布時間:2021-03-15 17:57:39 來源:億速云 閱讀:1983 作者:Leah 欄目:開發技術

怎么在Pandas中使用Shift函數?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Pandas Shift函數基礎

>>> 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

該函數主要的功能就是使數據框中的數據移動,若freq=None時,根據axis的設置,行索引數據保持不變,列索引數據可以在行上上下移動或在列上左右移動;若行索引為時間序列,則可以設置freq參數,根據periods和freq參數值組合,使行索引每次發生periods*freq偏移量滾動,列索引數據不會移動。

參數詳解:

  • period:表示移動的幅度,可以是正數,也可以是負數,默認值是1,1就表示移動一次,注意這里移動的都是數據,而索引是不移動的,移動之后沒有對應值的,就賦值為NaN。

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

  • axis: {0, 1, ‘index', ‘columns'},表示移動的方向,如果是0或者'index'表示上下移動,如果是1或者'columns',則會左右移動。

先來看一下一些簡單的示例:

1、非時間索引下period的設置

假設存在一個DataFrame數據df:

index value1
A 0
B 1
C 2
D 3

如果執行以下代碼  df.shift()  就會變成如下:

index value1
A NaN
B 0
C 1
D 2

執行 df.shift(2) 就會得到:

index value1
A NaN
B NaN
C 0
D 1

執行 df.shift(-1) 會得到:

index value1
A 1
B 2
C 3
D NaN

注意,shift移動的是整個數據,如果df有如下多列數據:

 AA BB CC DD
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15

執行 df.shift(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

如果只想移動df中的某一列數據,則需要這樣操作: df['DD']= df['DD'].shift(1)

執行后的數據為:

 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、時間索引下freq 參數設置

假設存在如下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

執行 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

執行 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軸向設置

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
#當period為正時,默認是axis = 0軸的設定,向下移動
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
#當axis=1,沿水平方向進行移動,正數向右移,負數向左移
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
#當period為負時,默認是axis = 0軸的設定,向上移動
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函數的使用

最近使用pandas處理數據,需求是想相鄰兩行上下相減,查API發現shift函數,很靈活,。你也可以隔任意行相減。

p['xx_1'] = p["xx"].shift(1)

上面得到的就是xx字段向下移動一行的結果,和之前相比向下移動一行,你可以設置為任意行,也可是向上向下

p['xx'] - p["xx_1"]

這就是前后兩行的差值,很方便,Pandas很強大

關于怎么在Pandas中使用Shift函數問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广汉市| 正蓝旗| 牟定县| 郎溪县| 夹江县| 安乡县| 射阳县| 崇义县| 南平市| 湘潭市| 太湖县| 工布江达县| 额尔古纳市| 连云港市| 蒲城县| 云霄县| 广德县| 德惠市| 龙里县| 海兴县| 庄浪县| 望谟县| 北票市| 镇平县| 清镇市| 射洪县| 晋江市| 常熟市| 涞源县| 香河县| 石阡县| 临清市| 长治市| 保康县| 兴化市| 东乡族自治县| 黎城县| 独山县| 敖汉旗| 射洪县| 航空|