You can do this:
Create a copy of you dataframe
df1 = df
df2 = df
temp = df1.assign(A=1).merge(df2.assign(A=1), on='A').drop('A', 1)
define the Haersine function:
def haversine(lat1, lon1, lat2, lon2, to_radians=True, earth_radius=6371):
if to_radians:
lat1, lon1, lat2, lon2 = np.radians([lat1, lon1, lat2, lon2])
a = np.sin((lat2-lat1)/2.0)**2 + \
np.cos(lat1) * np.cos(lat2) * np.sin((lon2-lon1)/2.0)**2
return earth_radius * 2 * np.arcsin(np.sqrt(a))
and calculated all pairwise distances:
temp['distances'] = temp.apply(lambda x: haversine(x['lat_x'], x['long_x'],x['lat_y'], x['long_y']), 1)
which gives:
postcode_x lat_x long_x district_x coordinates_x \
0 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
1 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
2 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
3 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
4 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
5 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
6 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
7 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
8 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
9 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
10 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
11 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
12 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
13 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
14 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
15 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
16 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
17 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
18 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
19 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
20 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
21 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
22 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
23 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
24 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
25 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
26 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
27 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
28 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
29 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
30 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
31 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
32 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
33 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
34 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
35 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
postcode_y lat_y long_y district_y coordinates_y \
0 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
1 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
2 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
3 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
4 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
5 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
6 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
7 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
8 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
9 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
10 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
11 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
12 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
13 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
14 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
15 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
16 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
17 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
18 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
19 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
20 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
21 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
22 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
23 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
24 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
25 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
26 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
27 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
28 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
29 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
30 AB1 0AA 57.101474 -2.242851 (57.101474 ,-2.242851) Aberdeen City
31 AB1 0AB 57.102554 -2.246308 (57.102554 ,-2.246308) Aberdeen City
32 AB1 0AD 57.100556 -2.248342 (57.100556 ,-2.248342) Aberdeen City
33 AB1 0AR 57.091357 -2.224831 (57.091357, -2.224831) Aberdeenshire
34 AB1 0AS 57.083838 -2.234437 (57.083838 ,-2.234437) Aberdeenshire
35 AB1 0AT 57.089299 -2.239768 (57.089299 ,-2.239768) Aberdeenshire
distances
0 0.000000
1 0.240859
2 0.346992
3 1.565351
4 2.025836
5 1.366547
6 0.240859
7 0.000000
8 0.253869
9 1.798078
10 2.201213
11 1.525913
12 0.346992
13 0.253869
14 0.000000
15 1.750198
16 2.039937
17 1.354641
18 1.565351
19 1.798078
20 1.750198
21 0.000000
22 1.017773
23 0.930967
24 2.025836
25 2.201213
26 2.039937
27 1.017773
28 0.000000
29 0.687374
30 1.366547
31 1.525913
32 1.354641
33 0.930967
34 0.687374
35 0.000000