使用迭代循环在两个数据帧之间相减,并获得最小值

2024-05-13 14:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,其中包含以下内容:

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=美国

我需要做的是,使用python/pandas,对于DF1[ID1],计算Lat1/Lon1和所有Lat'1…Lat's/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)

Tags: 数据id距离df1lonlatid3id2
2条回答

看起来您应该在DF2中找到最大值,然后从DF1中的所有值中减去它。这是因为如果你在寻找最小值,你应该减去最大值

因此,您可以使用:

DF1['N_min'] = DF1['N'] - DF2['N'].max()

我自己也是一个学习者,但你的问题有点不清楚,我的理解是你想要坐标之间的距离,以及最小值,现在为了将一个数据帧的纬度和经度值与另一个数据帧的最大纬度和经度进行减法,你想要迭代…所以…这是我尝试过的

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

但我想应用循环会让事情变得复杂。您可以使用其他方法再次将其转换为数据帧,但我希望这会有所帮助

相关问题 更多 >