Python 相反的pct_change()

Python 相反的pct_change(),python,python-2.7,pandas,percentage,Python,Python 2.7,Pandas,Percentage,假设我们有一个数据帧,我们计算行之间的百分比变化 y_axis = [1,2,3,4,5,6,7,8,9] x_axis = [100,105,115,95,90,88,110,100,0] DF = pd.DataFrame({'Y':y_axis, 'X':x_axis}) DF = DF[['Y','X']] DF['PCT'] = DF['X'].pct_change() Y X PCT 0 1 100 NaN 1 2 105 0.050000

假设我们有一个数据帧,我们计算行之间的百分比变化

y_axis = [1,2,3,4,5,6,7,8,9]
x_axis = [100,105,115,95,90,88,110,100,0]

DF = pd.DataFrame({'Y':y_axis, 'X':x_axis})

DF = DF[['Y','X']]
DF['PCT'] = DF['X'].pct_change()

    Y   X   PCT
0   1   100 NaN  
1   2   105 0.050000
2   3   115 0.095238
3   4   95  -0.173913
4   5   90  -0.052632
5   6   88  -0.022222
6   7   110 0.250000
7   8   100 -0.090909
8   9   0   -1.000000
这样从第一排开始。 我想从最后一行开始计算
pct\u change()

一种方法

DF['Reverse'] = list(reversed(x_axis))
DF['PCT_rev'] = DF['Reverse'].pct_change()
pct_rev = DF.PCT_rev.tolist()

DF['_PCT_'] = list(reversed(pct_rev))
DF2 = DF[['Y','X','PCT','_PCT_']]

    Y   X   PCT         _PCT_
0   1   100 NaN         -0.047619
1   2   105 0.050000    -0.086957
2   3   115 0.095238    0.210526
3   4   95  -0.173913   0.055556
4   5   90  -0.052632   0.022727
5   6   88  -0.022222   -0.200000
6   7   110 0.250000    0.100000
7   8   100 -0.090909   inf
8   9   0   -1.000000   NaN
但这是一个非常丑陋和低效的解决方案。
我想知道是否还有更优雅的解决方案?

我删除了我的另一个答案,因为这样更好

通过使用底层数组,您可以将时间减少一半。但您还必须抑制警告

a = DF.X.values
DF.assign(_PCT_=np.append((a[:-1] - a[1:]) / a[1:], np.nan))

   Y    X       PCT     _PCT_
0  1  100       NaN -0.047619
1  2  105  0.050000 -0.086957
2  3  115  0.095238  0.210526
3  4   95 -0.173913  0.055556
4  5   90 -0.052632  0.022727
5  6   88 -0.022222 -0.200000
6  7  110  0.250000  0.100000
7  8  100 -0.090909       inf
8  9    0 -1.000000       NaN
系列。pct变化(周期=1,填充方法=pad,限值=None,频率=None,**kwargs)

句点:int,默认为1个句点,用于转换形成百分比变化


嗯,是的。。。我忘了那个漂亮的参数。。。这就是答案。@su79eu7k谢谢
DF.assign(_PCT_=DF.X.pct_change(-1))

   Y    X       PCT     _PCT_
0  1  100       NaN -0.047619
1  2  105  0.050000 -0.086957
2  3  115  0.095238  0.210526
3  4   95 -0.173913  0.055556
4  5   90 -0.052632  0.022727
5  6   88 -0.022222 -0.200000
6  7  110  0.250000  0.100000
7  8  100 -0.090909       inf
8  9    0 -1.000000       NaN