gpt4 book ai didi

Pandas Shift函数的基础入门学习笔记

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Pandas Shift函数的基础入门学习笔记由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Pandas Shift函数基础 。

在使用Pandas的过程中,有时会遇到shift函数,今天就一起来彻底学习下。先来看看帮助文档是怎么说的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> 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:

?
1
2
3
4
5
index value1
A 0
B 1
C 2
D 3

如果执行以下代码  df.shift()  就会变成如下:

?
1
2
3
4
5
index value1
A NaN
B 0
C 1
D 2

执行 df.shift(2) 就会得到:

?
1
2
3
4
5
index value1
A NaN
B NaN
C 0
D 1

执行 df.shift(-1) 会得到:

?
1
2
3
4
5
index value1
A 1
B 2
C 3
D NaN

注意,shift移动的是整个数据,如果df有如下多列数据:

?
1
2
3
4
5
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) 的数据为:

?
1
2
3
4
5
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) 。

执行后的数据为:

?
1
2
3
4
5
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:

?
1
df = pd.DataFrame(np.arange( 16 ).reshape( 4 , 4 ),columns = [ 'AA' , 'BB' , 'CC' , 'DD' ],index = pd.date_range( '2012-06-01' , '2012-06-04' ))
?
1
2
3
4
5
    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))  后:

?
1
2
3
4
5
    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)) 后:

?
1
2
3
4
5
    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轴向设置 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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函数,很灵活,。你也可以隔任意行相减.

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

上面得到的就是xx字段向下移动一行的结果,和之前相比向下移动一行,你可以设置为任意行,也可是向上向下 。

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

这就是前后两行的差值,很方便,Pandas很强大 。

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.

原文链接:https://www.biaodianfu.com/pandas-shift.html 。

最后此篇关于Pandas Shift函数的基础入门学习笔记的文章就讲到这里了,如果你想了解更多关于Pandas Shift函数的基础入门学习笔记的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com