gpt4 book ai didi

python - Pandas 在下面的所有行中将一列乘以另一列

转载 作者:行者123 更新时间:2023-11-28 22:38:16 25 4
gpt4 key购买 nike

我想将一列与其下方另一列中的所有值相乘。例如:

r5,colC = (r5,colA * r6,colB) + 
(r5,colA * r7,colB) +
(r5,colA * r8,colB)
r6,colC = (r6,colA * r7,colB) +
(r6,colA * r8,colB)

目前我有一个糟糕的循环解决方案:

df = pd.DataFrame(data=[[11,0.5],[12,0.4],[12,0.3],[13,0.2],[14,0.1],[15,0.6]],
index=[2001,2002,2003,2004,2005,2006],
columns=['A','B'])

A B
2001 11 0.50
2002 12 0.40
2003 12 0.30
2004 13 0.20
2005 14 0.10
2006 15 0.60

df['C'] = [(df.loc[i]['A']* df['B'][df.index > i]).sum() for i in df.index]

A B C
2001 11 0.50 17.60
2002 12 0.40 14.40
2003 12 0.30 10.80
2004 13 0.20 9.10
2005 14 0.10 8.40
2006 15 0.60 0.00

编辑:

一些速度测试:

%timeit df['C'] = [(df.loc[i]['A']* df['B'][df.index > i]).sum() for i in df.index]
%timeit df['D'] = df.B[::-1].cumsum()[::-1].shift(-1).fillna(0) * df.A

1000 loops, best of 3: 1.69 ms per loop
1000 loops, best of 3: 505 µs per loop

最佳答案

我相信这会实现您的目标:

df['C'] = df.B[::-1].cumsum()[::-1].shift(-1).fillna(0) * df.A

df.B[::-1] 将数列反转,然后在这个反转的数列上计算累加和,然后再次反转得到原序。最终效果是 cumsum 自下而上而不是自上而下。

然后您需要将此 cumsum 移动一行并将其乘以“A”列。

fillna(0) 是为了匹配您的结果,否则底部数字将是 NaN,因为它下面没有行。

关于python - Pandas 在下面的所有行中将一列乘以另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35776259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com