python中shift(1)_PandasShift函数的基础⼊门学习笔记Pandas Shift函数基础
在使⽤Pandas的过程中,有时会遇到shift函数,今天就⼀起来彻底学习下。先来看看帮助⽂档是怎么说的:
>>> import pandas
>>> help(pandas.DataFrame.shift)
Help on function shift in 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',则会左右移动。
先来看⼀下⼀些简单的⽰例:
description words是什么意思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
scratch编程教程坦克大战C 3
D NaN
注意,shift移动的是整个数据,如果df有如下多列数据:AA BB CC DD
a 0 1 2 3
pathinfo四层目录好不好收录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
javascript进阶应用教程
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"]
python入门教程(非常详细)书这就是前后两⾏的差值,很⽅便,Pandas很强⼤
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对我们的⽀持。
本⽂标题: Pandas Shift函数的基础⼊门学习笔记
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论