2015-12-08 2 views
1

Я генерация накладки на карту с помощью панд и используемых:Панда: Проверьте, если строка имеет близкие значения

if ((df['latitude'] == new_latitude) & (df['longitude'] == new_longitude)).any(): 
    continue 

, чтобы убедиться, что я не произвожу повторяющиеся точки. Но я начинаю создавать точки, которые равны 0,001 (по долготе, по широте или по обоим), а не по тем, которые уже были произведены. Как я могу предотвратить это так же, как описано выше?

ответ

1

IIUC вы можете вычесть из всей серии, а затем просто фильтровать точки:

thresh = 0.001 
lat = df.loc[(df['latitude'] - new_latitude).abs() > thresh, 'latitude'] 
lon = df.loc[(df['longtitude'] - new_longtitude).abs() > thresh, 'longtitude'] 

это использует abs, чтобы получить абсолютное значение для создания булевой маски и фильтровать все дубликат и ряд повторяющихся значений из.

+0

Является ли это будет использоваться, как только панды dataframe завершена? Я стараюсь прекратить генерировать их с утверждением if, поскольку, как только один из них создается, он вызывает больше очков с разницей в 0,001, поэтому увеличивается время для массового запуска. – Abi

+0

Вам нужно будет объяснить, как загружаются данные, как правило, при росте df итеративно это дорого – EdChum

0

Вы можете использовать функцию numpy.isclose с atol выставиться к вашей точности:

import numpy as np 
prec = 0.001 
np.isclose(df['latitude'], new_latitude, atol=prec) 

if ((np.isclose(df['latitude'], new_latitude, prec) & (np.isclose(df['longitude'], new_longitude, prec)).any(): 
    continue 
Смежные вопросы