Pandas 熊猫:相邻元素的商系列

Pandas 熊猫:相邻元素的商系列,pandas,Pandas,对于序列x,x.diff创建一个新的序列y,y[0]==NaN,y[1]==x[1]-x[0],y[2]==x[2]-x[1],等等。假设我想要用除法而不是减法进行等价,例如y[1]==x[1]/x[0],等等。计算这个值的好方法是什么?使用以下序列: ser = pd.Series(np.random.randn(5)) ser Out[65]: 0 1.206456 1 -0.209808 2 -0.200228 3 0.657034 4 1.395551 dt

对于序列x,x.diff创建一个新的序列y,y[0]==NaN,y[1]==x[1]-x[0],y[2]==x[2]-x[1],等等。假设我想要用除法而不是减法进行等价,例如y[1]==x[1]/x[0],等等。计算这个值的好方法是什么?

使用以下序列:

ser = pd.Series(np.random.randn(5))

ser
Out[65]: 
0    1.206456
1   -0.209808
2   -0.200228
3    0.657034
4    1.395551
dtype: float64
您可以使用pandas 0.18.0+:

ser.rolling(2).apply(lambda x: x[1] / x[0])
Out[66]: 
0         NaN
1   -0.173904
2    0.954342
3   -3.281423
4    2.124018
dtype: float64
或者,对于早期版本:

pd.rolling_apply(ser, 2, lambda x: x[1] / x[0])
Out[67]: 
0         NaN
1   -0.173904
2    0.954342
3   -3.281423
4    2.124018
dtype: float64

使用以下系列:

ser = pd.Series(np.random.randn(5))

ser
Out[65]: 
0    1.206456
1   -0.209808
2   -0.200228
3    0.657034
4    1.395551
dtype: float64
您可以使用pandas 0.18.0+:

ser.rolling(2).apply(lambda x: x[1] / x[0])
Out[66]: 
0         NaN
1   -0.173904
2    0.954342
3   -3.281423
4    2.124018
dtype: float64
或者,对于早期版本:

pd.rolling_apply(ser, 2, lambda x: x[1] / x[0])
Out[67]: 
0         NaN
1   -0.173904
2    0.954342
3   -3.281423
4    2.124018
dtype: float64

您可以对熊猫组合使用shift和div功能。系列如下:

In[1]: import pandas as pd

In[2]: import numpy as np

In[3]: series = pd.Series(np.arange(5) + 1)

In[4]: series.div(series.shift(1))
Out[4]: 
0         NaN
1    2.000000
2    1.500000
3    1.333333
4    1.250000
dtype: float64

您可以对熊猫组合使用shift和div功能。系列如下:

In[1]: import pandas as pd

In[2]: import numpy as np

In[3]: series = pd.Series(np.arange(5) + 1)

In[4]: series.div(series.shift(1))
Out[4]: 
0         NaN
1    2.000000
2    1.500000
3    1.333333
4    1.250000
dtype: float64

这个可能比我的不适用更有效。这个可能比我的不适用更有效。