加速循环
我有一个可能来自数据透视表的数据框,所以它看起来很混乱。它不仅仅是一个 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