我有两个长度不等的数据帧df和df_IGR,它们都有列Lat和Lon,我想比较一下。在
当我进行元素比较时,我能够从两个df中的任何一个提取任何列值,对于这两个df之间的Lat和Lon差小于0.005
for row in df_IGR.itertuples():
print(df.index[((df.Lat - row.Lat) < 0.005) & ((df.Lon - row.Lon) < 0.005)])
这是可行的,但当我试图在if循环中使用相同的条件时,它就不起作用了。在
^{pr2}$有人能解释一下为什么它不起作用吗?我怎样才能让“如果循环”在这里工作呢?我已经看过这个答案,但我不知道我需要改变什么。 https://stackoverflow.com/a/36922103/7763326
编辑:数据看起来像
df.head()
>>
back_hr Lat Lon AGL Pressure
BT_time
1998-01-01 11:15:00 0.0 75.197 -150.045 1000.0 900.8
1998-01-01 11:00:00 -0.2 75.245 -150.001 1002.4 900.5
1998-01-01 10:00:00 -1.2 75.447 -149.863 1011.2 899.2
1998-01-01 09:00:00 -2.2 75.661 -149.785 1019.3 898.3
1998-01-01 08:00:00 -3.2 75.887 -149.762 1028.1 897.1
df_IGR.head()
>>
ID Lat Lon Elevation State Name FirstYr LastYr NObs
193 BEM0000644 50.796 4.358 99 NaN UCCLE 1949 2016 42564
195 BEM0000647 50.033 5.400 558 NaN ST-HUBE 1964 2006 26357
241 BOM0002685 53.933 27.633 231 NaN MINSK 1939 1998 43822
242 BOM0003300 52.116 23.683 144 NaN BREST 1951 2007 40167
244 BOM0003304 52.401 30.963 126 NaN GOMEL 1970 2017 32410
这里有一个可读的答案。我刚刚添加了一些数据,让事情变得更明显。对于生成的布尔数组,您可以根据需要应用}函数。在
any
或{df.Lat
是一个系列。在df.Lat - row.Lat
也是。在(df.Lat - row.Lat) < 0.0005
也是。在((df.Lat - row.Lat) < 0.0005) & ((df.Lon - row.Lon) < 0.0005)
也是。在最后一个序列是一个布尔序列,它告诉您
df
中的哪些点与df_gr中的这一行足够接近。整个系列不能只是对或错-这就是错误所说的。在我不太清楚你到底想达到什么目的,所以我只能解释一下这个错误。在
但是,如果要计算足够接近的点对数,可以执行嵌套循环:
相关问题 更多 >
编程相关推荐