

### 追記

二重ループで距離を出すことはできましたが、これを配列に詰めていく方法がわかりません。理想は行＝会員番号、列＝店舗名のクロス集計表のような形式にしたいです。  
また、会員数が約15万人程度いるためforループだと重く、他に何か良い方法があるようでしたら教えていただきたいです。

[code]

    !pip install geopy
    from geopy.distance import geodesic
    
    customer_no1 = customer_master1.iloc[:,0] store_no = store_master.iloc[:,0] customer_list1 = customer_master1.iloc[:,3:] store_list = store_master.iloc[:,2:] 
    
    for c in range(len(customer_list1)):
        for s in range(len(store_list)):
        dis = geodesic((customer_list1["Lat"].loc[c,],customer_list1["Lon"].loc[c,]), (store_list["緯度"].loc[s,],store_list["経度"].loc[s,])).km 
        print(customer_no1[c],",",store_no[s],",",f"{dis:.0f}") 
    
[/code]

### 前提

会員マスタと店舗マスタの緯度・経度情報から、会員ごとに各店舗までの距離を求めたいと思っております。

会員マスタ、店舗マスタのデータの持ち方としては、それぞれ住所とそれに対応する緯度・経度が格納されているイメージです。（添付画像ご参照ください）

[![画像の説明をここに入力](https://i.stack.imgur.com/8OcQL.png)](https://i.stack.imgur.com/8OcQL.png)

### 質問本題

以下のように2地点間の緯度・経度から距離を求める関数を定義したのですが、この関数をもとにして行＝各会員、列＝各店舗として各セルに該当する距離が入るようなマスタを作成したいと思っております。

色々とやり方を考えてみたのですが、良いやり方が思いつかず、どのような方法でやれば良いのかコード付きで教えていただけますと幸いです。

[code]

    ##モジュールimport
    from math import sin, cos, acos, radians
    
    earth_rad = 6371
    
    ##関数定義
    def latlng_to_xyz(lat, lng):
    rlat, rlng = radians(lat), radians(lng)
    coslat = cos(rlat)
    return coslat*cos(rlng), coslat*sin(rlng), sin(rlat)
    
    def dist_on_sphere(pos0, pos1, radius=earth_rad):
    xyz0, xyz1 = latlng_to_xyz(*pos0), latlng_to_xyz(*pos1)
    return acos(sum(x * y for x, y in zip(xyz0, xyz1)))*radius
    
[/code]

### アウトプットイメージ

[code]

    店舗A 店舗B 店舗C 店舗D ・ ・ ・
    会員A 距離 距離 距離 距離
    会員B 距離 距離 距離 距離
    ・
    ・
    ・
    ・
    
[/code]


CC BY-SA 4.0
2021-01-21T08:35:59.863
73466
2021-01-25T07:31:00.700
2021-01-25T07:31:00.700
42369
42369
question
python
店舗マスタと会員マスタの緯度経度情報から、総当たりで距離を求める方法について