तो मेरे पास एक सीएसवी फ़ाइल है जिसमें 3 कॉलम (शहर, अक्षांश, देशांतर) शामिल हैं और मैंने इस कोड का उपयोग करके इस सीएसवी फ़ाइल से पायथन में डेटा फ्रेम बनाया है
data = pd.read_csv("lat_long.csv",nrows=10)
Lat = data.lat.tolist()
Lon = data.lon.tolist()
suburb = data.suburb.tolist()
dict={'Latitude':Lat,'Longitude':Lon}
df = pd.DataFrame(dict,index=(suburb))
और आउटपुट यह है
Latitude Longitude
AUSTRALIAN NATIONAL UNIVERSITY -35.277272 149.117136
BARTON -35.201372 149.095065
DARWIN -12.801028 130.955789
DARWIN -12.801028 130.955789
PARAP -12.432181 130.843310
ALAWA -12.378451 130.877014
BRINKIN -12.367769 130.869808
CASUARINA -12.376597 130.850489
JINGILI -12.385761 130.873726
LEE POINT -12.360865 130.891349
अब मैं जो चाहता हूं वह 1 शहर से दूसरे 9 शहरों की दूरी का हर संभव संयोजन है। यह दिखना चाहिए
DISTANCE
AUSTRALIAN NATIONAL UNIVERSITY- BARTON
AUSTRALIAN NATIONAL UNIVERSITY - DARWIN
AUSTRALIAN NATIONAL UNIVERSITY - DARWIN
AUSTRALIAN NATIONAL UNIVERSITY - PARAP
मैंने लूप के लिए नेस्टेड का उपयोग करके ऐसा करने का प्रयास किया है और यह काम करता है लेकिन मुझे थोड़ा तेज़ चाहिए।
2 जवाब
मैं डेटाफ्रेम से शुरू करता हूं
city Latitude Longitude
0 AUSTRAL. -35.277272 149.117136
1 BARTON -35.201372 149.095065
2 DARWIN -12.801028 130.955789
3 DARWIN -12.801028 130.955789
4 PARAP -12.432181 130.843310
5 ALAWA -12.378451 130.877014
6 BRINKIN -12.367769 130.869808
7 CASUARINA -12.376597 130.850489
8 JINGILI -12.385761 130.873726
9 LEE_POINT -12.360865 130.891349
और नया कॉलम बनाएं जो कार्टेशियन उत्पाद बनाने के लिए केवल एक सहायक है जो हमें डेटाफ्रेम को स्वयं के साथ विलय करके प्राप्त होता है।
df['join'] = 1
df_joined = pd.merge(df, df,on='join')
df_joined['haversine_dist'] = df_joined.apply(lambda x: haversine((x.Latitude_x, x.Longitude_x),(x.Latitude_y,x.Longitude_y)), 1)
परिणाम (सिर्फ पहले 5 कॉलम)
city_x Latitude_x Longitude_x join city_y Latitude_y Longitude_y haversine_dist
0 AUSTRAL. -35.277272 149.117136 1 AUSTRAL. -35.277272 149.117136 0.000000
1 AUSTRAL. -35.277272 149.117136 1 BARTON -35.201372 149.095065 8.674473
2 AUSTRAL. -35.277272 149.117136 1 DARWIN -12.801028 130.955789 3093.972598
3 AUSTRAL. -35.277272 149.117136 1 DARWIN -12.801028 130.955789 3093.972598
4 AUSTRAL. -35.277272 149.117136 1 PARAP -12.432181 130.843310 3135.034018
5 AUSTRAL. -35.277272 149.117136 1 ALAWA -12.378451 130.877014 3138.077950
परीक्षण करने के लिए, मैं हाथ से मूल डेटाफ़्रेम का निर्माण करता हूं
import pandas as pd
import itertools
from haversine import haversine
x = {'city':['AUSTRALIAN NATIONAL UNIVERSITY', 'BARTON', 'DARWIN', 'DARWIN', 'PARAP', 'ALAWA', 'BRINKIN', 'CASUARINA', 'JINGILI', 'LEE_POINT' ]}
la = {'Latitude':[-35.277272,-35.201372, -12.801028 , -12.801028, -12.432181, -12.378451, -12.367769, -12.376597, -12.385761, -12.360865]}
lo = {'Longitude':[149.117136,149.095065, 130.955789 , 130.955789, 130.843310, 130.877014, 130.869808, 130.850489, 130.873726, 130.891349]}
data = {**x, **la, **lo}
df = pd.DataFrame(data)
दोहराव छोड़ें।
df = df.drop_duplicates()
सभी शहरों की सूची बनाएं।
city = list(df["city"])
उनमें से दो को मिलाएं
TwoCity = list(itertools.combinations(city, 2))
नए डेटाफ़्रेम का निर्माण करें
df1 = pd.DataFrame({'TwoCity':TwoCity})
df1['Distance(km)'] = df1.apply(lambda row: \
haversine((df[df['city']==row.TwoCity[0]]['Latitude'], df[df['city']==row.TwoCity[0]]['Longitude']),\
(df[df['city']==row.TwoCity[1]]['Latitude'], df[df['city']==row.TwoCity[1]]['Longitude'])),axis=1)
print(df1.to_string(index=False))
df1
का अंतिम परिणाम है (हाथ से थोड़ा समायोजन के साथ):
TwoCity Distance(km)
(AUSTRALIAN NATIONAL UNIVERSITY, BARTON) 8.674473
(AUSTRALIAN NATIONAL UNIVERSITY, DARWIN) 3093.972598
(AUSTRALIAN NATIONAL UNIVERSITY, PARAP) 3135.034018
(AUSTRALIAN NATIONAL UNIVERSITY, ALAWA) 3138.077950
(AUSTRALIAN NATIONAL UNIVERSITY, BRINKIN) 3139.500311
(AUSTRALIAN NATIONAL UNIVERSITY, CASUARINA) 3139.808790
(AUSTRALIAN NATIONAL UNIVERSITY, JINGILI) 3137.587038
(AUSTRALIAN NATIONAL UNIVERSITY, LEE_POINT) 3138.882795
(BARTON, DARWIN) 3086.264122
(BARTON, PARAP) 3127.309536
(BARTON, ALAWA) 3130.345201
(BARTON, BRINKIN) 3131.767583
(BARTON, CASUARINA) 3132.079061
(BARTON, JINGILI) 3129.855257
(BARTON, LEE_POINT) 3131.146957
(DARWIN, PARAP) 42.791471
(DARWIN, ALAWA) 47.759804
(DARWIN, BRINKIN) 49.071577
(DARWIN, CASUARINA) 48.558395
(DARWIN, JINGILI) 47.026561
(DARWIN, LEE_POINT) 49.441057
(PARAP, ALAWA) 7.006568
(PARAP, BRINKIN) 7.718791
(PARAP, CASUARINA) 6.229645
(PARAP, JINGILI) 6.128079
(PARAP, LEE_POINT) 9.492285
(ALAWA, BRINKIN) 1.422460
(ALAWA, CASUARINA) 2.888261
(ALAWA, JINGILI) 0.887821
(ALAWA, LEE_POINT) 2.499614
(BRINKIN, CASUARINA) 2.316553
(BRINKIN, JINGILI) 2.045378
(BRINKIN, LEE_POINT) 2.462424
(CASUARINA, JINGILI) 2.721699
(CASUARINA, LEE_POINT) 4.770298
(JINGILI, LEE_POINT) 3.365596
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।