我有两个数据帧,其中包含以下内容:
DF1:一些与某些坐标相关的数据,n行:
ID1 Lat1 Lon1
ID2 Lat2 Lon2
ID3 Lat3 Lon3
...
ID_n Lat_n Lon_n
DF2:与另一个坐标相关联的一些不同数据,s行:
ID'1 Lat'1 Lon'1
ID'2 Lat'2 Lon'2
ID'3 Lat'3 Lon'3
...
ID'_s Lat'_s Lon'_s
请注意n!=s。
我需要做的是,使用python/pandas,对于DF1ID1,计算Lat1/Lon1和所有Lat‘1...Lat/Lon’1...Lon‘s之间的距离,并获得最小值。
距离的计算不是问题,问题是我如何实现迭代循环。下面是我需要的示例:
ID N
1 5
2 3
3 6
4 9
ID' N'
1 2
2 4
3 1
结果将是:
ID Nmin
1 1 (5-4)
2 -1 (3-4)
3 2 (6-4)
4 5 (9-4)
发布于 2020-02-09 04:13:28
看起来您只需要找到DF2中的最大值,然后从DF1中的所有值中减去它。这是因为如果你在寻找最小值,你应该减去最大值。
因此,您可以只使用:
DF1['N_min'] = DF1['N'] - DF2['N'].max()
发布于 2020-02-09 16:32:29
我自己也是一个初学者,但你的问题有点不清楚,我所理解的是你想要坐标之间的距离和最小值,现在为了将一个数据帧的纬度和经度值与另一个数据帧的最大纬度和经度相减,你想要迭代...所以...这是我尝试过的。
import pandas as pd
import numpy as np
df1 = {
'ID':['A','B','C','D'],
'LAT':[1,2,3,4],
'LONG':[5,6,7,8],
}
df2 = {
'ID':['E','F','G'],
'LAT':[9,10,11],
'LONG':[12,13,14],
}
df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)
输出:
ID LAT LONG
0 A 1 5
1 B 2 6
2 C 3 7
3 D 4 8
ID LAT LONG
0 E 9 12
1 F 10 13
2 G 11 14
现在为了迭代,我从答案here中得到了一点帮助
for index, coor in df1.iterrows():
print(coor['LAT'] - df2['LAT'].max(), coor['LONG'] - df2['LONG'].max())
输出将为:
-10 -9
-9 -8
-8 -7
-7 -6
但我猜应用循环会使它变得复杂。您可以使用其他方法将其再次转换为数据帧,但我希望这对您有所帮助。
https://stackoverflow.com/questions/60126679
复制相似问题