【发布时间】:2020-06-29 16:19:33
【问题描述】:
所以,我是一个 python 新手,正在寻找对如何优化我的代码有想法的人。我正在使用一个超过 6000 行的电子表格,而我的这部分代码似乎真的效率低下。
for x in range(0,len(df):
if df.at[x,'Streak_currency'] != str(df.at[x,'Currency']):
df.at[x, 'Martingale'] = df.at[x-1, 'Martingale'] + (df.at[x-1, 'Martingale'] )/64
x+=1
if df.at[x,'Streak_currency'] == str(df.at[x,'Currency']):
x+=1
运行可能需要 8 分钟以上。 以我有限的知识,我只设法将我的 df.loc 更改为 df.at,它帮助很大。但是我觉得
更新
在这部分代码中,我试图根据先前的值应用一个函数,直到满足某个条件,在这种情况下, df.at[x,'Streak_currency'] != str(df.at[x,'Currency']):
我真的不知道为什么这个迭代需要这么长时间。理论上,它应该只查看以前的值并应用该函数。以下是输出示例:
Periodo Currency ... Agrupamento Martingale 0 1 GBPUSD 1 1.583720 <--- starts aplying a function over and over. 1 1 GBPUSD 1 1.608466 2 1 GBPUSD 1 1.633598 3 1 GBPUSD 1 1.659123 4 1 GBPUSD 1 1.685047 5 1 GBPUSD 1 1.711376 <- stops aplying, since Currency changed 6 1 EURCHF 2 1.256550 7 1 USDCAD 3 1.008720 <- starts applying again until currency changes 8 1 USDCAD 3 1.024481 9 1 USDCAD 3 1.040489 10 1 GBPAUD 4 1.603080
【问题讨论】:
-
我认为循环内代码中的
x+=1没有任何用处,尤其是在货币条件下,因为x每次迭代都会获得新值,从不在乎什么值你加了。你可以试试这个例子来理解我在说什么 ``` for i in range(0,10): ... print(i) ... i += 1 ``` -
如果你能解释你试图从这个循环中实现的目标,那么任何人都可以为你的问题提供答案
-
感谢@KareemEmad 的快速回复!我尝试更新帖子,以便您更好地了解我想要实现的目标
标签: python pandas loops optimization