Как сделать радиус х (м) относительно координат питона? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть база данных, расход и координаты, такие:

enter image description here

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

код:

R9 = []
R9_NaN = []

for index, row in df.iterrows():
    coord_1 = (row['X'], row['Y'])
    for index, row2 in df.iterrows():
        coord_2 = (row['X'], row['Y'])
        if coord_2 != coord_1:
            dist = geopy.distance.geodesic(coord_1, coord_2).km
            if dist <= 0.100:
                média=sum((row['Consumo2018']/12)/(len(coord_2)+1))
                if row['Consumo2018']/12 < 1.5*média:
                    R9_NaN.append(index)
                    R9.append(0)
                else:
                    R9.append(0)

print(R9)

Geopy.distance - это библиотека, которая уже рассчитывает расстояние между двумя координатами.

в вышеприведенном коде; Предполагается, что «средние показатели» - это среднее потребление объектов в радиусе 100 м, которое также должно варьироваться от места к месту.

Это дает мне эту ошибку:

TypeError: объект с плавающей точкой не повторяется

1 Ответ

0 голосов
/ 03 июня 2019

Таким образом, вы получаете ошибку с плавающей точкой, потому что вы пытаетесь взять сумму одного числа. Это можно исправить, удалив sum в строке media = .... Если вы хотите, чтобы эта строка принимала среднее значение всего фрейма данных, вам нужно изменить строку, чтобы получать данные из фрейма данных, а не только из строки.

R9 = []
R9_NaN = []

for index, row in df.iterrows():
    coord_1 = (row['X'], row['Y'])
    for index, row2 in df.iterrows():
        coord_2 = (row['X'], row['Y'])
        if coord_2 != coord_1:
            dist = geopy.distance.geodesic(coord_1, coord_2).km
            if dist <= 0.100:
#                média=((row['Consumo2018']/12)/(len(coord_2)+1)) #Change to this to remove sum
                média=((df['Consumo2018']/12)/(len(df['Consumo2018'])+1)) #Change to this to get actual mean
                if row['Consumo2018']/12 < 1.5*média:
                    R9_NaN.append(index)
                    R9.append(0)
                else:
                    R9.append(0)

print(R9)
...