对于下面的算法,有没有一种方法可以代替for循环进行矢量化?
def test_func(df):
idx_lst = [df.index[0]]
end = df.loc[df.index[0], "end"]
for idx in df.index[1:]:
if df.loc[idx, "begin"] > end:
end = df.loc[idx, "end"]
idx_lst.append(idx)
return df.loc[idx_lst]
测试用例:
Dataframe ({“开始”:[3、5、7、8、10、12、14],“结束”:[8、9、10、12、13、14、17]})
begin end
0 3 8
1 5 9
2 7 10
3 8 12
4 10 13
5 12 14
6 14 17
测试函数(df)
begin end
0 3 8
4 10 13
6 14 17
1条答案
按热度按时间3xiyfsfu1#
我同意前面的评论,即很难甚至不可能使用矢量化。
但请尝试以下函数:
我的解决方案的优点是“比较数组”(arr -是否某行的 * 开始 * column〉另一行的 end column)是一次性计算的。
另一个优点是不需要处理每一行。
还有一个优点是我使用了 Numpy,众所周知,它的运行速度比 Pandas 快。
在您的源数据样本上使用 %timeit,我声明我的函数生成结果所用的时间与您的函数相同。
但是在更大的源数据样本上试试,也许我的解决方案会更快。