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],等等。计算这个值的好方法是什么?使用以下序列: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
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
这个可能比我的不适用更有效。这个可能比我的不适用更有效。