In [1]:
import pandas as pd

In [2]:
df = pd.DataFrame({'a': range(1, 6),
                   'b': [x**2 for x in range(1, 6)],
                   'c': [x**3 for x in range(1, 6)]})

In [3]:
print(df)


   a   b    c
0  1   1    1
1  2   4    8
2  3   9   27
3  4  16   64
4  5  25  125

In [4]:
print(df.pct_change())


          a         b         c
0       NaN       NaN       NaN
1  1.000000  3.000000  7.000000
2  0.500000  1.250000  2.375000
3  0.333333  0.777778  1.370370
4  0.250000  0.562500  0.953125

In [5]:
print(df.pct_change(2))


          a         b         c
0       NaN       NaN       NaN
1       NaN       NaN       NaN
2  2.000000  8.000000  26.00000
3  1.000000  3.000000   7.00000
4  0.666667  1.777778   3.62963

In [6]:
print(df.pct_change(-1))


          a         b         c
0 -0.500000 -0.750000 -0.875000
1 -0.333333 -0.555556 -0.703704
2 -0.250000 -0.437500 -0.578125
3 -0.200000 -0.360000 -0.488000
4       NaN       NaN       NaN

In [7]:
print(df.pct_change(axis=1))


    a    b    c
0 NaN  0.0  0.0
1 NaN  1.0  1.0
2 NaN  2.0  2.0
3 NaN  3.0  3.0
4 NaN  4.0  4.0

In [8]:
print(df.pct_change(-1, axis=1))


          a         b   c
0  0.000000  0.000000 NaN
1 -0.500000 -0.500000 NaN
2 -0.666667 -0.666667 NaN
3 -0.750000 -0.750000 NaN
4 -0.800000 -0.800000 NaN

In [9]:
print(df.pct_change(2).dropna())


          a         b         c
2  2.000000  8.000000  26.00000
3  1.000000  3.000000   7.00000
4  0.666667  1.777778   3.62963

In [10]:
print(df.pct_change(2).fillna(0))


          a         b         c
0  0.000000  0.000000   0.00000
1  0.000000  0.000000   0.00000
2  2.000000  8.000000  26.00000
3  1.000000  3.000000   7.00000
4  0.666667  1.777778   3.62963

In [11]:
print(df.pct_change(2).fillna(method='bfill'))


          a         b         c
0  2.000000  8.000000  26.00000
1  2.000000  8.000000  26.00000
2  2.000000  8.000000  26.00000
3  1.000000  3.000000   7.00000
4  0.666667  1.777778   3.62963

In [12]:
df['b_pct_change'] = df['b'].pct_change(-1)
print(df)


   a   b    c  b_pct_change
0  1   1    1     -0.750000
1  2   4    8     -0.555556
2  3   9   27     -0.437500
3  4  16   64     -0.360000
4  5  25  125           NaN