pandas 基于其他两列的值创建新列

rvpgvaaj  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(90)

这是我的dataframe:

df = pd.DataFrame({'a': [10, 20, 50], 'b': [5, -2, 20]})

这是我想要的输出:

a   b      c
0  10   5     105
1  20  -2     20.58
2  50  20     12.348

我有一个初始值1000。c的第一行是这样计算的:
(1000* 0.1)* 1.05
ab是百分比。也就是说,1000的10%是100,然后我想把100加上5%,这样第一行就是105。然后对于c的下一行,我想计算105的20%,即21,然后减去2%,即20.58。
我试过这个代码,但它不工作:

df['b'] = df['b'] / 100
df['c'] = (df.a / 100).cumprod() * 1000
df['c'] = df.c * (1 + df.b)

请随意编辑标题。我想要更具体的东西,但无法弄清楚。

xpcnnkqh

xpcnnkqh1#

你也可以用cumprod来实现:

(df.a / 100 * (1 + df.b / 100)).cumprod() * 1000

#0    105.000
#1     20.580
#2     12.348
#dtype: float64

基本上,对于每一行,您需要a + ba上的百分比。因此,a + a * b首先使用/ 100转换为百分比。

wnrlj8wa

wnrlj8wa2#

尝试:

out, cur = [], 1000
for a, b in zip(df.a / 100, df.b / 100):
    tmp = cur * a
    out.append(cur := tmp + tmp * b)

df['c'] = out
print(df)

图纸:

a   b        c
0  10   5  105.000
1  20  -2   20.580
2  50  20   12.348

相关问题