вычтите между 2 кадрами данных с итеративным l oop и получите минимальное значение - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть два кадра данных, которые содержат следующее:

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, для DF1 [ID1] вычислить расстояние между Lat1 / Lon1 и ALL Lat'1 ... Lat's / Lon'1 ... Lon's и получают минимальное значение.

Исчисление расстояния не является проблемой, проблема в том, как я могу реализовать итерированный l oop. Пример того, что мне нужно:

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)

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Я сам учащийся, но ваш вопрос немного неясен, я понимаю, что вам нужно расстояние между координатами и минимальное значение, теперь для вычитания значений широты и долготы одного кадра данных с максимальным широта и долгота другого, вы хотите повторить ... так ... вот что я попробовал.

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

теперь для итерации я взял Небольшая помощь от ответа здесь :

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

но я думаю, что применение циклов усложняет задачу. Вы можете использовать другие способы для его преобразования в массив данных снова, но все же я надеюсь, что это помогло.

0 голосов
/ 08 февраля 2020

Похоже, вы просто должны найти максимальное значение в DF2 и вычесть его из всех значений в DF1. Это потому, что если вы ищете минимальное значение, вы должны вычесть максимальное значение.

Итак, вы можете просто использовать:

DF1['N_min'] = DF1['N'] - DF2['N'].max()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...