我是个乞丐,做了一个基本的嵌套for循环来修改现有的一系列(a)小时数据。这个系列由熊猫组成,有日期时间索引和值。你知道吗
我的代码基本上比较了两个序列(A&B)的年、月和日索引,如果它们在某些行中相同,则更改序列(A)的值并生成一个修改的序列。你知道吗
它适用于短数据,但效率很低。 当我运行10000个计数数据时,循环永远不会结束。 A系列约为10000支,B系列约为1000支。你知道吗
我已经搜索了好几天关于简化嵌套循环的类似问题,但是我无法处理如何处理索引比较部分,另外我希望在修改后序列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。基本上,如果数据集方便的话,可以让长条件语句更快地识别错误结果。我不知道你比较的日期具体是什么样的,但考虑一下这个例子:
日期:2019年1月1日
日期2:2019年1月2日
在最终确定两个日期不相等之前,您的条件语句要经过3次比较。你知道吗
2019年==2019年
一月==一月
1号!=2
如果您要将条件更改为:
你的程序将首先比较这两天,并确定它们不相等。因为你的条件是由布尔运算和运算组成的,所以短路逻辑的结论是,整个条件一定是假的。你知道吗
这样,只需要做一次比较,而不是三次。然而,这种方法的任何显著改进都取决于你的约会是什么样的。如果你的约会都在同一年,或者是同几年,我提到的方法肯定能提高你的表现。但是如果你的集合包含了月、日、年的广泛分布,你可能不会得到那么明显的变化。你知道吗
基本上,考虑在一般情况下哪个条件最有可能返回False。在条件语句中首先计算该条件。你知道吗
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐