Как в Python создать таблицу, учитывая при этом определённую формулу?

Как мне в Python создать таблицу, которая будет копией первой таблицы и дополнит ее данными из второй таблицы, используя формулу для определения расстояния: sqrt((x1-x2)² + (y1-y2)²)? В результате мне нужна таблица, которая будет выглядеть примерно так: <br/> <pre><code>newbs longitude1 latitude1   oldbs      longitude2        l</code></pre>
  • 1 декабря 2024 г. 4:03
Ответы на вопрос 2
Для создания таблицы, которая будет объединять данные из двух источник таблиц и вычислять расстояние между точками, можно использовать библиотеку `pandas` в Python. 

Вот пошаговая инструкция, как это сделать:

1. Установите библиотеку `pandas` (если она еще не установлена):
   ```
   pip install pandas
   ```

2. Используйте код ниже, чтобы создать нужную таблицу:

```python
import pandas as pd
import numpy as np

# Пример данных первой таблицы
data1 = {
    'newbs': ['A', 'B', 'C'],
    'longitude1': [10.0, 20.0, 30.0],
    'latitude1': [15.0, 25.0, 35.0]
}
df1 = pd.DataFrame(data1)

# Пример данных второй таблицы
data2 = {
    'oldbs': ['X', 'Y', 'Z'],
    'longitude2': [12.0, 22.0, 32.0],
    'latitude2': [18.0, 28.0, 38.0]
}
df2 = pd.DataFrame(data2)

# Функция для расчета расстояния
def calculate_distance(x1, y1, x2, y2):
    return np.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)

# Создаем пустой список для хранения результатов
results = []

# Перебираем строки обеих таблиц
for _, row1 in df1.iterrows():
    for _, row2 in df2.iterrows():
        distance = calculate_distance(row1['longitude1'], row1['latitude1'], row2['longitude2'], row2['latitude2'])
        results.append({
            'newbs': row1['newbs'],
            'longitude1': row1['longitude1'],
            'latitude1': row1['latitude1'],
            'oldbs': row2['oldbs'],
            'longitude2': row2['longitude2'],
            'latitude2': row2['latitude2'],
            'distance': distance
        })

# Создаем новый DataFrame из результатов
result_df = pd.DataFrame(results)

# Смотрим получившуюся таблицу
print(result_df)
```

### Пояснения к коду:
1. Импортируем необходимые библиотеки `pandas` и `numpy`.
2. Создаем два примера DataFrame, представляющие первые и вторые таблицы с координатами.
3. Определяем функцию `calculate_distance`, которая вычисляет расстояние по формуле.
4. Создаем список `results`, в который будем добавлять результаты.
5. Перебираем строки из обеих таблиц и вычисляем расстояние, добавляя результаты в список.
6. Создаем новый DataFrame `result_df` из списка `results`.
7. Выводим получившуюся таблицу.

### Вывод
Ваш итоговый результат будет содержать все комбинации `newbs` и `oldbs` с соответствующими координатами и рассчитанным расстоянием. Если вам нужно отфильтровать результаты или применить другие условия, вы можете изменить логику в переборе.
Совершенно непонятно формулируешь вопрос. 

1. Кого считать соседями? Если пункт А находится в радиусе или на расстоянии R от пункта B, то они соседи.

2. Земля не плоская, твоя формула евклидовой дистанции при чем здесь? для расчета дистанций есть другие специальные формулы.

3.
Как мне в Python добавить таблицу, которая дублирует первую таблицу, добавляет данные из второй таблицы, учитывая формулу выше.
Реляционные операции они происходят на основе ключа или ключей. На основании чего ты тут собрался собирать. Ты можешь найти потенциально соседей для любой взятой точки. Возникает вопрос а зачем тогда вообще две таблицы их можно просто слить в одну. Возможно связь есть, а ты о ней не рассказал.

4. По итогу из того что есть задача видится как нахождения соседей для каждой точки датасета. Я бы брут форсем, такое не решал, а использовал бы базы с approximate nearest neighbor. Построить индексы O(n log(n)), запросы O(log(n) ), ну и вся задача для каждой точки датасета O(n log(n)).

5. Используй подходящие базы ну или хотя бы geopandas. В этих случаях все инструменты уже есть.
Похожие вопросы