gpt4 book ai didi

python - python中循环的矢量化

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:15 25 4
gpt4 key购买 nike

我在 Python 中有以下代码:

import numpy as np
import pandas as pd
colum1 = [1,2,3,4,5,6,7,8,9,10,11,12]
colum2 = [10,20,30,40,50,60,70,80,90,100,110,120]

df = pd.DataFrame({
'colum1' : colum1,
'colum2' : colum2
});

df.loc[df.colum1 == 1,'result'] = df['colum2']

for i in range(len(colum2)):
df.result = np.where(df.colum1>1, 5 - (df['colum2'] - df.result.shift(1)), df.result)

df.result 的结果是:

    colum1  colum2  result0        1      10    10.01        2      20    -5.02        3      30   -30.03        4      40   -65.04        5      50  -110.05        6      60  -165.06        7      70  -230.07        8      80  -305.08        9      90  -390.09       10     100  -485.010      11     110  -590.011      12     120  -705.0

我想知道是否有一种方法可以让我在不使用循环的情况下获得相同的结果

最佳答案

您的操作取决于两件事,DataFrame 中的前一行,以及 DataFrame 中连续值之间的差异。这暗示该解决方案将需要 shiftdiff。但是,您想向扩展总和添加一个小常量,并实际从每一行中减去它,而不是添加它。


要设置问题的各个部分,首先创建您的移位系列,在其中添加 5:

a = df.colum2.shift().add(5).cumsum().fillna(0)

现在您需要系列中元素之间的差异,并在 colum2 中用它们各自的值填充缺失的结果:

b = df.colum2.diff().fillna(df.colum2)

要获得最终结果,只需从 b 中减去 a:

b - a

0      10.0
1 -5.0
2 -30.0
3 -65.0
4 -110.0
5 -165.0
6 -230.0
7 -305.0
8 -390.0
9 -485.0
10 -590.0
11 -705.0
Name: colum2, dtype: float64

关于python - python中循环的矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52748555/

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