PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पांडा डेटाफ़्रेम में निकटतम बिंदु खोजें

यह scipy के लिए एक अच्छा उपयोग मामला लगता है सीडीएसटी , यहां<पर भी चर्चा की। /ए> ।

import pandas as pd
from scipy.spatial.distance import cdist


data1 = {'Lat': pd.Series([50.6373473,50.63740441,50.63744285,50.63737839,50.6376054,50.6375896,50.6374239,50.6374404]),
         'Lon': pd.Series([3.075029928,3.075068636,3.074951754,3.074913884,3.0750528,3.0751209,3.0750246,3.0749554]),
         'Zone': pd.Series(['A','A','A','A','B','B','B','B'])}

data2 = {'Lat': pd.Series([50.6375524099,50.6375714407]),
         'Lon': pd.Series([3.07507914474,3.07508201591])}


def closest_point(point, points):
    """ Find closest point from a list of points. """
    return points[cdist([point], points).argmin()]

def match_value(df, col1, x, col2):
    """ Match value x from col1 row to value in col2. """
    return df[df[col1] == x][col2].values[0]


df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

df1['point'] = [(x, y) for x,y in zip(df1['Lat'], df1['Lon'])]
df2['point'] = [(x, y) for x,y in zip(df2['Lat'], df2['Lon'])]

df2['closest'] = [closest_point(x, list(df1['point'])) for x in df2['point']]
df2['zone'] = [match_value(df1, 'point', x, 'Zone') for x in df2['closest']]

print(df2)
#    Lat        Lon       point                           closest                  zone
# 0  50.637552  3.075079  (50.6375524099, 3.07507914474)  (50.6375896, 3.0751209)  B
# 1  50.637571  3.075082  (50.6375714407, 3.07508201591)  (50.6375896, 3.0751209)  B



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक रेल क्षेत्र जो JSON ऑब्जेक्ट्स की एक सरणी है?

  2. विशेष को छोड़कर, अन्य सभी के बाद शून्य मानों को क्रमबद्ध करना

  3. एसोसिएशन टेबल का उपयोग कैसे करें अनुक्रमित करें?

  4. F# SQLProvider को Postgres से कनेक्ट करें

  5. लक्ष्य तालिका में अद्वितीय बाधा के बिना डुप्लिकेट प्रविष्टियों से बचें?