将 Dataframe 列中的值与同一列中的前一个值相除

Divide a value in a Dataframe column with the previous value in the same column

我正在使用 pandas 和数据框,我有一个简单的问题:

我有一个这样的数据框(我们称它为 df):

index A B C
0 3 2 5
1 4 7 6
2 2 4 8

我需要创建一个额外的列 D,其中我必须具有 C 值与前一个值的比率:该列的第一个值应为 5/0(其中无法划分,NAN 或 0 都可以),第二个值应为 6/5,第三个值应为 8/6。

我无法让它工作。我正在尝试应用 lambda 函数,但在使用“先前值”时没有成功。 (.shift() 无效)

df['D'] = df['C'].apply(lambda x:x['C']/ ???   )

这是正确的道路吗,还是我遗漏了什么?

使用Series.shift代替apply

df['D'] = df['C'] / df['C'].shift()

# index  A  B  C         D
# 0      3  2  5       NaN
# 1      4  7  6  1.200000
# 2      2  4  8  1.333333

如果你想要 0 而不是 NaN,可选择链接 Series.fillna

df['D'] = df['C'].div(df['C'].shift()).fillna(0)

# index  A  B  C         D
# 0      3  2  5  0.000000
# 1      4  7  6  1.200000
# 2      2  4  8  1.333333