gpt4 book ai didi

python - 如何用 Python 中更快的选项替换 for 循环

转载 作者:太空宇宙 更新时间:2023-11-04 05:24:52 25 4
gpt4 key购买 nike

我有两个数据框,大约有 10 000 行。它们与下面的 a 和 b 类似,但行数更多。

 a
Out[9]:
end start
0 4.0 3
1 5.5 5
2 7.5 7
3 9.5 9
4 11.5 11
5 15.0 14
6 18.0 17
7 21.0 20
8 26.0 25
9 31.0 30

b
Out[10]:
status
moment
8.0 o
10.0 o
14.5 o
16.0 o
19.0 o
27.0 o
28.0 o
30.5 o
35.0 o
40.0 o
50.0 o

我必须找到数据帧 b 中属于数据帧 a 的结束和开始之间的所有时刻。

我为此开发了 for 循环,它适用于小型数据帧。

 for r in a.index:    
for k in b.index:
if a.ix[r,'start'] <k and k <a.ix[r,'end']:
b.ix[k,'status']='m' # replaces m to o if moment is in between start and end

下面你可以看到当时刻介于开始和结束之间时 for 循环如何替换 o -> m。

 n [12]: b
Out[12]:
status
moment
8.0 o
10.0 o
14.5 m
16.0 o
19.0 o
27.0 o
28.0 o
30.5 m
35.0 o
40.0 o
50.0 o

当我尝试将它用于巨大的数据帧(数据帧中超过 10000 行)时,它无法在合理的时间内获得结果。

您有什么想法可以更快地阐述我的 for 循环并使其适用于更长的数据帧吗?

最佳答案

这是一个没有for循环的选项,它没有避免向量扫描,而是被向量化了:

b[b.index.map(lambda m: ((m > a.start) & (m < a.end)).any())] = "m"

b

# status
# moment
# 8.0 o
# 10.0 o
# 14.5 m
# 16.0 o
# 19.0 o
# 27.0 o
# 28.0 o
# 30.5 m
# 35.0 o
# 40.0 o
# 50.0 o

关于python - 如何用 Python 中更快的选项替换 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166546/

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