我有2个不等长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循环中使用相同的条件时,它不起作用。
for row in df_IGR.itertuples():
count = 0
if (((df.Lat - row.Lat) < 0.0005) & ((df.Lon - row.Lon) < 0.0005)):
print (row.Name)
count = count + 1
print (count)
>>ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
任何人都可以解释为什么它不起作用?我如何制作&#34; if循环&#34;在这里工作?我已经完成了这个答案,但我不明白我需要改变什么。 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
答案 0 :(得分:1)
df.Lat
是一个系列。
df.Lat - row.Lat
也是如此。
(df.Lat - row.Lat) < 0.0005
也是如此。
((df.Lat - row.Lat) < 0.0005) & ((df.Lon - row.Lon) < 0.0005)
也是如此。
最后一个系列是一个布尔系列,它告诉你{f}中哪些点与df_IGR中的这一行足够接近。整个系列不仅仅是真或假 - 这就是错误所说的。
我不太确定你到底想要实现什么,所以我只能解释错误。
但是,如果你试图计算足够接近的点对数,你可以做一个嵌套循环:
df
答案 1 :(得分:0)
这是一个可读的答案。我刚刚添加了一些数据,以便更明显地发生了什么。使用生成的布尔数组,您可以根据需要应用any
或all
函数。
Lat1 = [3, 1, 4, 6, 1, 4, 9] # df_IGR.Lat.values
Lat2 = [6, 7, 4, 1, 3] # df.Lat.values
Lon1 = [5, 4, 5, 6, 8, 3, 9] # df_IGR.Lon.values
Lon2 = [4, 2, 1, 6, 5] # df.Lon.values
comparison = [[(i - j < 3) & (k - l < 3) for i, k in zip(Lat1, Lon1)] \
for j, l in zip(Lat2, Lon2)]
# [[True, True, True, True, False, True, False],
# [False, True, False, False, False, True, False],
# [False, False, False, False, False, True, False],
# [True, True, False, False, True, False, False],
# [True, True, True, False, False, True, False]]