ここには、私が後にしていることのtl; dr版があります。詳細は下にあります: SQLクエリでは、[person 1 id]、[person 2 id]、[group in group]のフィールドを持つテーブルが表示されます。私は正方形のパンダのデータフレームに変換したいと思っています.1人1列と1人1列、各要素の値は一緒にグループに入っていた回数です。私は、私の結果の行を見て、一度にデータフレームの1つの要素を埋めるよりも、それを行うよりエレガントな方法を探しています。自己結合からスクエアパンダデータフレームへのSQL結果の変換
私はperson_idの列とassignment_idの列を持つ代入テーブルを持つデータベースを持っています。それはあまりにも他のものを持っているが、ここで我々の目的のために、これは重要なものである:
SELECT person_id, assignment_id FROM assignments;
person_id | assignment_id ----------+-------------- 385 | 42 163 | 29 51 | 42 385 | 37 163 | 37 ...
私は二人が同じ割り当てにされている頻度を見てみたいです。だから私は実行します。
のような出力を提供しますSELECT a1.person_id AS p1_id, a2.person_id AS p2_id, COUNT(*)
FROM assignments AS a1
INNER JOIN assignments AS a2 ON a1.assignment_id = a2.assignment_id AND a1.person_id < a2.person_id
GROUP BY a1.person_id, a2.person_id
:
p1_id | p2_id | count ------+-------+------ 51 | 385 | 1 163 | 385 | 1 ...
は今、私は一人一人のために行とデータフレームにデータにアクセスし、それをダンプしたいPythonスクリプトを構築しています、各個人の列と、割り当てを共有した回数を持つセルとを含む。出力はこのようなものになります(私は*セルに何が入っているかは気にしません - 合理的に0またはその人の割り当ての数になる可能性があります)、最初の行と列がどのように)にフォーマット:
p1_id | p_51 | p_163 | p_385 -------+--------+--------+-------- 51 | * | 0 | 1 163 | 0 | * | 1 385 | 1 | 1 | *
私は約20人を持っていますので、ちょうど一つずつ値を設定することが測定可能パフォーマンスを傷つけないだろうが、私は私の方が大きい持っているときのために良い習慣を学ぶためにしようとしていますデータセット。このようなことをする正しい方法は何ですか?
(それはそれを処理するための最良の方法だ場合、私は、SQLクエリを変更するに開いている。)
優れています。ありがとう! –