gpt4 book ai didi

python - 如何简化具有索引比较的嵌套循环?

转载 作者:行者123 更新时间:2023-12-01 07:51:46 24 4
gpt4 key购买 nike

我是个初学者,制作了一个基本的嵌套 for 循环来修改现有的每小时数据系列(A)。该系列由 pandas 制成,具有日期时间索引和值。

我的代码基本上比较两个系列(A&B)的年,月和日索引,如果它们在某些行相同,则更改系列(A)的值并制作修改后的系列。

它适用于短数据,但效率很差。当我运行 10,000 个计数数据时,循环永远不会结束。A系列约10,000个,B系列约1,000个。

我已经搜索了几天有关简化嵌套循环的类似问题,但我无法处理如何处理索引比较部分,而且我希望修改后A系列的对象类型和索引不变。即使是一个小提示也会对我很有帮助。

for i in range(0,len(A)):
for j in range(0,len(B)):
if A.index.year[i] == B.index.year[j] and A.index.month[i] == B.index.month[j] and A.index.day[i] == B.index.day[j]:
A.values[i] = B.values[j]
break
else:
pass

最佳答案

可能对您有益的一件事是 Short Circuiting 。基本上,如果您的数据集方便的话,您可以使长条件语句更快地识别错误结果。我不知道您要比较的日期具体是什么样的,但请考虑以下示例:

日期 1:2019 年 1 月 1 日

日期 2:2019 年 1 月 2 日

您的条件语句经过 3 次比较,最终确定两个日期不相等。

  1. 2019 == 2019

  2. 一月 == 一月

  3. 1 != 2

如果您要将条件更改为:

A.index.day[i] == B.index.day[j] and A.index.month[i] == B.index.month[j] and A.index.year[i] == B.index.year[j]

您的程序将首先比较这两天,并确定它们不相等。而且由于您的条件由 bool AND 运算组成,因此短路逻辑得出的结论是整体条件必定为假。

这样,只需要进行一次比较,而不是三次。然而,从这种方法中获得任何明显的改进取决于你的约会是什么样的。如果您的日期都在同一年或同一几年,我提到的方法肯定会提高您的表现。但如果您的集合包含广泛分布的月份、日期和年份,您可能不会注意到明显的变化。

本质上,请考虑在一般情况下哪个条件最有可能返回 False。在条件语句中首先评估该条件。

希望这有帮助!

关于python - 如何简化具有索引比较的嵌套循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56172354/

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