質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

4707閲覧

python pandas 2つのdataframeに収められた点のユークリッド距離を計算したい。

icemanstanding

総合スコア73

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/10/29 04:26

編集2021/10/29 05:20

2つのCSVファイルから読み込んだdfaとdfbに、各々座標が組み込まれています。
ここまでは準備ができています。
dfaとdfbの座標同士で、全組合せ計算して最短距離Lminを全て算出したいのですが、
「dfaの全行に対して、dfbの1行ずつの計算を行い、出力を得る」という類の
計算をしたことがないので困っています。

最短距離の計算はこちらで行うので、「dfaの全行に対して、dfbの1行ずつの計算を最後まで行う」部分を教えてください。

算出結果の最短距離Lmin1、2・・・・ は、dfb['最短距離']に格納できればベストで、
dfaのどの座標との距離かは記録する必要はありません。

どなたか参考になる様なコードを作った方がいたら、
アドバイスをいただけないでしょうか?

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2021/10/29 04:44

「コードが全く浮かびません」という段階では適切な回答を得るのは難しいと思われます。 2つのCSVをそれぞれ読み込むコードも書けないということでしょうか?
icemanstanding

2021/10/29 04:52

言葉足らずで気分を害してスイマセン。 CSVを読み込むところまではコードもできています。 正確には「dfaの全行に対して、dfbの1行ずつの計算を行い、出力を得る」という類の 計算をしたことがないので困っています。 インターネットの検索もしてみましたが合致するものもなく、ココに投稿しました。
can110

2021/10/29 05:03

第三者はこの質問を読んだだけだと、質問者がどこまでできていて何が分からないのかが分かりません。 それが分かるように、できている時点までのコードおよび何が分からないかを提示しましょう。 また、どのような出力結果を得たいのかも分からないので、それを記載ください。
guest

回答2

0

データフレームをクロス結合して距離を計算します。

python

1import pandas as pd 2import math 3 4dfa = pd.DataFrame({'Xa': [1, 2, 3], 'Ya': [3, 2, 1]}) 5dfb = pd.DataFrame({'Xb': [5, 6, 7], 'Yb': [7, 6, 5]}) 6 7dfb['最短距離'] = ( 8 dfb.merge(dfa, how='cross').groupby(['Xb', 'Yb']) 9 .apply(lambda x: 10 x.reset_index().agg( 11 [lambda p: math.sqrt((p.Xa-p.Ya)**2+(p.Yb-p.Ya)**2)], axis=1) 12 .min()).values) 13 14print(dfb.to_markdown(index=False))

print(dfb.to_markdown(index=False))

XbYb最短距離
574.47214
663.60555
752.82843

投稿2021/10/29 06:59

melian

総合スコア19912

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

ベストアンサー

pandas.DataFrame.iterrowsで行毎に走査できるので、以下のような2重ループで処理できます。

Python

1import pandas as pd 2 3dfa = pd.DataFrame([1,2,3]) 4dfb = pd.DataFrame([4,5,6]) 5dfb['min'] = 0 6for ib, rb in dfb.iterrows(): 7 for _, ra in dfa.iterrows(): 8 print(rb[0],ra[0]) # 全組み合わせ 9 10 dfb.iloc[ib,1] = f'{ib}での最短距離' 11 12print(dfb) 13# 0 min 14#0 4 0での最短距離 15#1 5 1での最短距離 16#2 6 2での最短距離

投稿2021/10/29 05:31

can110

総合スコア38284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問