gpt4 book ai didi

python - 从第二个 DF 中快速(矢量化)查找属于相同大小的矩形(由两个点给出)的一个 DF 中的点

转载 作者:太空狗 更新时间:2023-10-30 00:43:13 25 4
gpt4 key购买 nike

我有如下所示的数据框“A”:

type    latw    lngs    late    lngn
0 1000 45.457966 9.174864 45.458030 9.174907
1 1000 45.457966 9.174864 45.458030 9.174907
2 1000 45.458030 9.174864 45.458094 9.174907
3 1000 45.458094 9.174864 45.458157 9.174907
4 1000 45.458157 9.174864 45.458221 9.174907
5 1000 45.458221 9.174864 45.458285 9.174907
6 1000 45.458285 9.174864 45.458349 9.174907
7 1000 45.458349 9.174864 45.458413 9.174907
8 1000 45.458413 9.174864 45.458477 9.174907
9 1000 45.458477 9.174864 45.458540 9.174907
10 1000 45.458540 9.174864 45.458604 9.174907
11 1000 45.458604 9.174864 45.458668 9.174907
12 1000 45.458668 9.174864 45.458732 9.174907
13 1000 45.458732 9.174864 45.458796 9.174907
14 1000 45.458796 9.174864 45.458860 9.174907
15 1000 45.458860 9.174864 45.458923 9.174907
16 1000 45.458923 9.174864 45.458987 9.174907
17 1000 45.458987 9.174864 45.459051 9.174907
18 1000 45.459051 9.174864 45.459115 9.174907
19 1000 45.459115 9.174864 45.459179 9.174907
20 1000 45.459179 9.174864 45.459243 9.174907
21 1000 45.459243 9.174864 45.459306 9.174907
22 1000 45.459306 9.174864 45.459370 9.174907
23 1000 45.459370 9.174864 45.459434 9.174907
24 1000 45.459434 9.174864 45.459498 9.174907
25 1000 45.459498 9.174864 45.459562 9.174907
26 1000 45.459562 9.174864 45.459626 9.174907
27 1000 45.459626 9.174864 45.459689 9.174907
28 1000 45.459689 9.174864 45.459753 9.174907
29 1000 45.459753 9.174864 45.459817 9.174907
... ... ... ... ... ...
970 1000 45.460583 9.175545 45.460647 9.175587
971 1000 45.460647 9.175545 45.460711 9.175587
972 1000 45.460711 9.175545 45.460775 9.175587
973 1000 45.460775 9.175545 45.460838 9.175587
974 1000 45.460838 9.175545 45.460902 9.175587
975 1000 45.460902 9.175545 45.460966 9.175587
976 1000 45.460966 9.175545 45.461030 9.175587
977 1000 45.461030 9.175545 45.461094 9.175587
978 1000 45.461094 9.175545 45.461157 9.175587
979 1000 45.461157 9.175545 45.461221 9.175587
980 1000 45.461221 9.175545 45.461285 9.175587
981 1000 45.461285 9.175545 45.461349 9.175587
982 1000 45.461349 9.175545 45.461413 9.175587
983 1000 45.461413 9.175545 45.461477 9.175587
984 1000 45.461477 9.175545 45.461540 9.175587
985 1000 45.461540 9.175545 45.461604 9.175587
986 1000 45.461604 9.175545 45.461668 9.175587
987 1000 45.457966 9.175587 45.458030 9.175630
988 1000 45.458030 9.175587 45.458094 9.175630
989 1000 45.458094 9.175587 45.458157 9.175630
990 1000 45.458157 9.175587 45.458221 9.175630
991 1000 45.458221 9.175587 45.458285 9.175630
992 1000 45.458285 9.175587 45.458349 9.175630
993 1000 45.458349 9.175587 45.458413 9.175630
994 1000 45.458413 9.175587 45.458477 9.175630
995 1000 45.458477 9.175587 45.458540 9.175630
996 1000 45.458540 9.175587 45.458604 9.175630
997 1000 45.458604 9.175587 45.458668 9.175630
998 1000 45.458668 9.175587 45.458732 9.175630
999 1000 45.458732 9.175587 45.458796 9.175630

它有 22,000,000 行 × 5 列,数据框“B”如下所示:

    type        Lat       Lng
0 0 45.465739 9.180830
1 2 45.463950 9.187113
2 1 45.468015 9.180648
3 1 45.462209 9.187447
4 0 45.459578 9.184007
5 1 45.459822 9.187034
6 2 45.454988 9.180310
7 2 45.459818 9.189377
8 0 45.462200 9.187440
9 0 45.467160 9.180100
10 2 45.459407 9.183300
11 2 45.457699 9.187434
12 1 45.455319 9.186697
13 0 45.461138 9.191943
14 2 45.456397 9.189028
15 0 45.457062 9.185878
16 1 45.461980 9.187024
17 1 45.464319 9.183142
18 2 45.464227 9.187065
19 1 45.460886 9.185216

它有 2,000,000 行 × 3 列。我想用“B”替换数据框“A”的类型值,其中:

A[latw]<B[lat]<A[late] and A[lngs]<B[lng]<B[lngn]

我想检查 B 中的一个位置属于 A 中的哪个矩形。

PS 我正在寻找 python 中最快的方法,例如使用并行处理。

最佳答案

你可以这样做:

假设我们有以下 DF:

In [150]: A
Out[150]:
type latw late lngs lngn
0 1000 45.457966 45.458030 9.174864 9.174907
1 1001 45.457966 45.458030 9.174864 9.174907
2 1002 45.458030 45.458094 9.174864 9.174907
3 1003 45.458094 45.458157 9.174864 9.174907
16 1004 45.458923 45.458987 9.174864 9.174907
17 1005 45.458987 45.459051 9.174864 9.174907
970 1006 45.460583 45.460647 9.175545 9.175587
971 1007 45.460647 45.460711 9.175545 9.175587
972 1008 45.460711 45.460775 9.175545 9.175587
996 1009 45.458540 45.458604 9.175587 9.175630
997 1010 45.458604 45.458668 9.175587 9.175630
998 1011 45.458668 45.458732 9.175587 9.175630
999 1012 45.458732 45.458796 9.175587 9.175630

In [151]: B
Out[151]:
type Lat Lng
0 0 45.4581 9.1749
1 1 45.4590 9.1749
2 2 45.4586 9.1756

解决方法:

B['new'] = B.apply(lambda x: A.loc[  (A.latw < x.Lat) & (x.Lat < A.late)
& (A.lngs < x.Lng) & (x.Lng < A.lngn), 'type'].head(1),
axis=1) \
.values.diagonal()

In [153]: B
Out[153]:
type Lat Lng new
0 0 45.4581 9.1749 1003.0
1 1 45.4590 9.1749 1005.0
2 2 45.4586 9.1756 1009.0

PS 我不确定这是实现该目标的最快方法...

关于python - 从第二个 DF 中快速(矢量化)查找属于相同大小的矩形(由两个点给出)的一个 DF 中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41727332/

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