我有以下数据帧 - df
:
crs Band1 level
lat lon
34.595694 32.929028 b'' 4.000000e+00 1000
32.937361 b'' 1.200000e+01 950
32.945694 b'' 2.900000e+01 925
34.604028 32.929028 b'' 7.000000e+00 1000
32.937361 b'' 1.300000e+01 950
... ... ...
71.179028 25.679028 b'' 6.000000e+01 750
71.187361 25.662361 b'' 1.000000e+00 725
25.670694 b'' 6.000000e+01 1000
25.679028 b'' 4.000000e+01 800
71.529028 19.387361 b'' 1.843913e-38 1000
[17671817 rows x 3 columns]
以及两个数组:
lon1=np.arange(-11,47,0.25)
lat1=np.arange(71.5,34.5,-0.25)
这两个数组(
lat1
,lon1
)生成坐标对,间隔为0.25度。数据框
df
包含点(lat
,lon
),这些点在 lon1
和 lat1
数组定义的点内密集分布。我想做的是:
- 找到所有距离
lat1
,lon1
定义的点 0.125 度以内的df
中的所有点。 - 从这个子数据框中获取
level
的max
和min
值,并将它们存储在与lon1
和lat1
相同大小的单独数组中。
for x1 in lon1:
for y1 in lat1:
df3=df[(df.index.get_level_values('lon')>x1-0.125) & (df.index.get_level_values('lon')<x1+0.125)]
df3=df3[(df3.index.get_level_values('lat')>y1-0.125) & (df3.index.get_level_values('lat')<y1+0.125)]
但是这种方法的性能非常慢。我相信有更快的方法。 我已经标记了scikit-learn,因为可能可以使用它来解决问题,但我对这个包缺乏经验。 任何帮助将不胜感激。