如何解决Python:有没有更快的方法可以在for循环中对数据框进行过滤
我在python中的元组上有一个for循环,它是一个数据帧的索引。然后将索引下的所有值相加。
示例:
t3 = time()
for row in list_of_index:
a=[]
if row[-1]!='end':
a=df1.loc[row[:7]].to_numpy()
b=df2.loc[row[:6]].to_numpy()
print(solver.add_constraint(solver.sum(dvSupportedOuts[row[0],row[6],row[1],row2[0],row[2],row2[1],row2[2],row[3],row[4],row2[3],row[5],row2[4],row2[5],row2[6],row2[7],row2[8]]
for row2 in np.reshape(a,(-1,11)))
== solver.sum(dvSupportedOuts[row[0],row2[8],row2[9]]
for row2 in np.reshape(b,12)))#size of step_sequence
+ dvMBDown[row[0],row[5]]
- dvMBUp[row[0],row[5]]))
print(area_name+" mb:",round((time()-t3),1),"s")
这是我正在做的约束,它返回超过100k的约束。在线程化过程中运行此代码需要40分钟。过滤器有助于返回较少的数据,以供在Solver.sum()中运行的循环使用。 有没有一种更快的方法来过滤for循环内的值? (这是为创建docplex约束而完成的) 谢谢
解决方法
我能够使其速度提高18倍,主要时间花费在了过滤器(.loc())上。首先,我将索引从多索引更新为由所有索引列连接的单个索引。这导致速度提高了3倍。然后,我将数据框更改为字典,从而使总速度提高了15倍。现在,我可以在3分钟而不是45分钟的时间内创建模型约束。而且我已经在1个索引上进行线程化(并行处理)。通常,我没有看到使用add_constrains()显着提高速度,但有时会有所帮助。 50k约束在3分钟内形成60万行数据 如果需要,我可以分享逻辑
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。