如何有效获取 Pandas DataFrame 中行之间的日志变化率?

Eri*_*sen 4 python numpy series dataframe pandas

假设我有一些 DataFrame(在我的例子中大约有 10000 行,这只是一个最小的例子

>>> import pandas as pd

>>> sample_df = pd.DataFrame(
        {'col1': list(range(1, 10)), 'col2': list(range(10, 19))})

>>> sample_df

   col1  col2
0     1    10
1     2    11
2     3    12
3     4    13
4     5    14
5     6    15
6     7    16
7     8    17
8     9    18
Run Code Online (Sandbox Code Playgroud)

出于我的目的,我需要计算DataFrame 中ln(col_i(n+1) / col_i(n))每个代表的系列,其中代表行号。 我该如何计算这个col_in


背景知识

我知道我可以使用非常简单的方式获得每列之间的差异

>>> sample_df.diff()

   col1  col2
0   NaN   NaN
1     1     1
2     1     1
3     1     1
4     1     1
5     1     1
6     1     1
7     1     1
8     1     1
Run Code Online (Sandbox Code Playgroud)

或者百分比变化,即(col_i(n+1) - col_i(n))/col_i(n+1),使用

>>> sample_df.pct_change()

       col1      col2
0       NaN       NaN
1  1.000000  0.100000
2  0.500000  0.090909
3  0.333333  0.083333
4  0.250000  0.076923
5  0.200000  0.071429
6  0.166667  0.066667
7  0.142857  0.062500
8  0.125000  0.058824
Run Code Online (Sandbox Code Playgroud)

我一直在努力寻找一种直接的方法来将每个连续列直接除以前一个列。如果我知道如何做到这一点,我可以在事后将自然对数应用于该系列中的每个元素。

目前,为了解决我的问题,我正在尝试创建另一列,每列的行元素向下移动 1,然后在两列之间应用公式。不过,对我来说,这似乎很混乱且次优。

任何帮助将不胜感激!