Как в 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` с соответствующими координатами и рассчитанным расстоянием. Если вам нужно отфильтровать результаты или применить другие условия, вы можете изменить логику в переборе.
Совершенно непонятно формулируешь вопрос. <br/> <br/> 1. Кого считать соседями? Если пункт А находится в радиусе или на расстоянии R от пункта B, то они соседи. <br/> <br/> 2. Земля не плоская, твоя формула евклидовой дистанции при чем здесь? для расчета дистанций есть другие специальные формулы. <br/> <br/> 3. <blockquote>Как мне в Python добавить таблицу, которая дублирует первую таблицу, добавляет данные из второй таблицы, учитывая формулу выше.</blockquote> Реляционные операции они происходят на основе ключа или ключей. На основании чего ты тут собрался собирать. Ты можешь найти потенциально соседей для любой взятой точки. Возникает вопрос а зачем тогда вообще две таблицы их можно просто слить в одну. Возможно связь есть, а ты о ней не рассказал. <br/> <br/> 4. По итогу из того что есть задача видится как нахождения соседей для каждой точки датасета. Я бы брут форсем, такое не решал, а использовал бы базы с approximate nearest neighbor. Построить индексы O(n log(n)), запросы O(log(n) ), ну и вся задача для каждой точки датасета O(n log(n)). <br/> <br/> 5. Используй подходящие базы ну или хотя бы geopandas. В этих случаях все инструменты уже есть.
Похожие вопросы