浅谈pandas中shift和diff函数关系
通过?pandas.DataFrame.shift命令查看帮助文档
Signature:pandas.DataFrame.shift(self,periods=1,freq=None,axis=0) Docstring: Shiftindexbydesirednumberofperiodswithanoptionaltimefreq
该函数主要的功能就是使数据框中的数据移动,若freq=None时,根据axis的设置,行索引数据保持不变,列索引数据可以在行上上下移动或在列上左右移动;若行索引为时间序列,则可以设置freq参数,根据periods和freq参数值组合,使行索引每次发生periods*freq偏移量滚动,列索引数据不会移动
①对于DataFrame的行索引是日期型,行索引发生移动,列索引数据不变
In[2]:importpandasaspd ...:importnumpyasnp ...:df=pd.DataFrame(np.arange(24).reshape(6,4),index=pd.date_range(start= ...:'20170101',periods=6),columns=['A','B','C','D']) ...:df ...: Out[2]: ABCD 2017-01-010123 2017-01-024567 2017-01-03891011 2017-01-0412131415 2017-01-0516171819 2017-01-0620212223 In[3]:df.shift(2,axis=0,freq='2D') Out[3]: ABCD 2017-01-050123 2017-01-064567 2017-01-07891011 2017-01-0812131415 2017-01-0916171819 2017-01-1020212223 In[4]:df.shift(2,axis=1,freq='2D') Out[4]: ABCD 2017-01-050123 2017-01-064567 2017-01-07891011 2017-01-0812131415 2017-01-0916171819 2017-01-1020212223 In[5]:df.shift(2,freq='2D') Out[5]: ABCD 2017-01-050123 2017-01-064567 2017-01-07891011 2017-01-0812131415 2017-01-0916171819 2017-01-1020212223
结论:对于时间索引而言,shift使时间索引发生移动,其他数据保存原样,且axis设置没有任何影响
②对于DataFrame行索引为非时间序列,行索引数据保持不变,列索引数据发生移动
In[6]:importpandasaspd ...:importnumpyasnp ...:df=pd.DataFrame(np.arange(24).reshape(6,4),index=['r1','r2','r3','r4' ...:,'r5','r6'],columns=['A','B','C','D']) ...:df ...: Out[6]: ABCD r10123 r24567 r3891011 r412131415 r516171819 r620212223 In[7]:df.shift(periods=2,axis=0) Out[7]: ABCD r1NaNNaNNaNNaN r2NaNNaNNaNNaN r30.01.02.03.0 r44.05.06.07.0 r58.09.010.011.0 r612.013.014.015.0 In[8]:df.shift(periods=-2,axis=0) Out[8]: ABCD r18.09.010.011.0 r212.013.014.015.0 r316.017.018.019.0 r420.021.022.023.0 r5NaNNaNNaNNaN r6NaNNaNNaNNaN In[9]:df.shift(periods=2,axis=1) Out[9]: ABCD r1NaNNaN0.01.0 r2NaNNaN4.05.0 r3NaNNaN8.09.0 r4NaNNaN12.013.0 r5NaNNaN16.017.0 r6NaNNaN20.021.0 In[10]:df.shift(periods=-2,axis=1) Out[10]: ABCD r12.03.0NaNNaN r26.07.0NaNNaN r310.011.0NaNNaN r414.015.0NaNNaN r518.019.0NaNNaN r622.023.0NaNNaN
通过?pandas.DataFrame.diff命令查看帮助文档,发现和shift函数形式一样
Signature:pd.DataFrame.diff(self,periods=1,axis=0) Docstring: 1stdiscretedifferenceofobject
下面看看diff函数和shift函数之间的关系
In[13]:df.diff(periods=2,axis=0) Out[13]: ABCD r1NaNNaNNaNNaN r2NaNNaNNaNNaN r38.08.08.08.0 r48.08.08.08.0 r58.08.08.08.0 r68.08.08.08.0 In[14]:df-df.diff(periods=2,axis=0) Out[14]: ABCD r1NaNNaNNaNNaN r2NaNNaNNaNNaN r30.01.02.03.0 r44.05.06.07.0 r58.09.010.011.0 r612.013.014.015.0 In[15]:df.shift(periods=2,axis=0) Out[15]: ABCD r1NaNNaNNaNNaN r2NaNNaNNaNNaN r30.01.02.03.0 r44.05.06.07.0 r58.09.010.011.0 r612.013.014.015.0
以上这篇浅谈pandas中shift和diff函数关系就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。