将 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
我正在使用 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