2016-07-02 2 views

ответ

4

Вы можете использовать комбинацию из shift и div function forне, как показано ниже:

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 

pandas div

pandas shift

+2

Это один, вероятно, более эффективным, чем у меня (не применяется). – ayhan

2

С следующей серии:

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 

Вы можете использовать rolling().apply() (панд 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() (для более ранних версий):

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 
Смежные вопросы