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

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

新規登録して質問してみよう
ただいま回答率
85.35%
GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Python

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

Q&A

解決済

2回答

910閲覧

[python]各種グループ内に特定の数字を見つけてカウントしていきたい

yu--32

総合スコア10

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Python

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

0グッド

0クリップ

投稿2020/05/15 01:18

先にすいません、pythonやりたいことがあるのですが、それをするためにどのような関数を使えばいいかすら、
すなわち、とっかかりすら分からない状態です。とっかかり部分だけでも大丈夫ですのでご教授いただけると助かります。

いま、5つの会社がそれぞれ参加している、3つのグループがあるとします。
会社は、企業名ではなく、番号で個体識別しています。
グループも、グループ名ではなく、番号で個体識別しています。
実際のデータ(現在はcsvデータ)はこのような感じです。

グループ企業番号
11
14
12
13
25
22
23
31
34
35

このようなデータがある上で、pythonやりたいこととしては、
企業番号1と企業番号2の会社が同じグループにいる数(上の表だと1)
企業番号1と企業番号3の会社が同じグループにいる数(上の表だと1)
企業番号1と企業番号4の会社が同じグループにいる数(上の表だと2)
・・・
企業番号5と企業番号4の会社が同じグループにいる数(上の表だと1)
みたいなことを、企業番号の数だけ計算したいと思っております。
ぼんやりとした質問で大変申し訳ございませんが、pythonで上記作業を行うに当たって、必要な作業をご教授いただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

企業番号ごとに、どのグループに属しているかを表にまとめておいて、その表をつかって集計してはどうでしょうか。
企業ごとのグループ情報を集合の形にしておけば、積集合を計算するだけで簡単に集計できると思います。

python

1import pandas as pd 2 3data = {'グループ': ['g1', 'g1', 'g1', 'g1', 'g2', 'g2', 'g2', 'g3', 'g3', 'g3'], 4 '企業番号': [1, 4, 2, 3, 5, 2, 3, 1, 4, 5]} 5 6df = pd.DataFrame(data) # 元のデータ 7print(df) 8print('-' * 50) 9 10res = df.groupby(df['企業番号'], as_index=False).agg(set) # 企業ごとにどのグループに属しているかのまとめ 11print(res) 12print('-' * 50) 13 14targets = [1, 2] # 集計対象の企業番号 15ans = res['グループ'][res['企業番号'].isin(targets)].agg(lambda x: set.intersection(*x)) 16print(f'{targets}の会社に共通するグループ数: {len(ans)}件 ({ans})')

出力イメージは以下のようになります。

グループ 企業番号 0 g1 1 1 g1 4 2 g1 2 3 g1 3 4 g2 5 5 g2 2 6 g2 3 7 g3 1 8 g3 4 9 g3 5 -------------------------------------------------- 企業番号 グループ 0 1 {g3, g1} 1 2 {g2, g1} 2 3 {g2, g1} 3 4 {g3, g1} 4 5 {g3, g2} -------------------------------------------------- [1, 2]の会社に共通するグループ数: 1件 ({'g1'})

投稿2020/05/15 04:47

編集2020/05/15 04:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yu--32

2020/05/17 02:53

回答いただきまして、ありがとうございます。 お示しのコードでうまく回せました。出力結果に、どのグループと重複しているのかまで表示できるのはとても驚きました。 targetのところに、全組み合わせdataframeを入れてループさせてあげると、すべての組み合わせの結果を出力することができました。 resとaggの使い方が自分自身勉強不足であまりよく分かっておりませんでしたが、これを機に理解を深めることができました。 本当にありがとうございました。
guest

0

Pythonというよりも、どういうアルゴリズムを組むかという話ですね。

企業番号の組み合わせ(対)をキーとした辞書を用意し、グループごとに企業番号の組み合わせを全て洗い出して、辞書をインクリメントしていくというのはどうでしょうか。

投稿2020/05/15 01:33

x98000

総合スコア1096

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

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

yu--32

2020/05/15 04:04

コメントありがとうございます。 企業の組み合わせを作成して、グループごとにその組み合わせが検索できるのかなど、少し調べてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問