加速循环

我有一个可能来自数据透视表的数据框,所以它看起来很混乱。它不仅仅是一个 XY 2 维数据,而是一个 4 或 5。

我想要做的是,如果满足某些条件,则添加一个新列并从第 3 行(第 0、1、2 行是字符串)开始计算同比变化。

并且为了在计算时避免零除法错误(如果直接进行数学运算,我会得到错误),我必须在循环中添加循环(if else首先输入 0 的函数)。通过使用time()函数,我可以看出程序每次运行都需要将近 10 分钟。

我想知道是否有任何更聪明的方法来编程它。感谢您的善意建议!

for i in range(1, 187):
   k = i * 1000
   if df.iloc[1, i] == df.iloc[1, i - 1] and df.iloc[1, i] != df.iloc[1, i+ 1]:
        df[k] = 0
        a = df.columns.get_loc[k]
        df.iloc[0, a] = df.iloc[0, i]
        df.iloc[1, a] = df.iloc[1, i]
        df.iloc[2, a] = 'YoY%'
        
        for m in range(3, 13259):
            if df.iloc[m, i - 1] == 0:
                 df.iloc[m, a] = 0
            else:
                 df.iloc[m, a] = (df.iloc[m, i] - df.iloc[m, i - 1]) / df.iloc[m, i - 1]
df = df.sort_values(by=[0, 1, 2], axis=1)

排序前的数据框片段如下所示:

0      cash    cash    cash     cash     trade   trade    cash    cash    trade
1      54100   54100   54103    54103    52209   52209    54100   54103   52209
2      02-21   03-21   02-21    03-21    02-21   03-21    YoY%    YoY%    YoY%
3      0       0       1500     1500     -28.1   -2476.8  0       0       87.14 
4      0       500     16500    16500    25      35       0       0       0.4
5      0       0       300      600      3.1     420      0       1       134.5
       ..      ..      ..       ..       ..      ..       ..      ..      ..
13258  1973.7  4484.9  18300    18600    0       750      1.3     0.02    0

以上是加速循环的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>