ホームページ > バックエンド開発 > Python チュートリアル > ループを使用せずに、Pandas DataFrame 内の用語の出現を ID およびグループ別に効率的にグループ化し、カウントするにはどうすればよいですか?

ループを使用せずに、Pandas DataFrame 内の用語の出現を ID およびグループ別に効率的にグループ化し、カウントするにはどうすればよいですか?

DDD
リリース: 2024-11-29 00:01:12
オリジナル
524 人が閲覧しました

How can I efficiently group and count occurrences of terms within Pandas DataFrames by ID and group without using loops?

Pandas DataFrame での値のグループ化とカウント

データ分析では、多くの場合、データをグループ化し、特定の値または用語の出現をカウントする必要があります。このタイプの集計は、Pandas の groupby 関数と size 関数を使用して簡単に実現できます。

問題:

次の列を持つ DataFrame df があるとします: id、グループと用語。目標は、ループを使用せずに、ID とグループの組み合わせごとに各一意の用語の出現数をカウントすることです。

解決策:

これを達成するには、次のようにします。次の手順を使用できます:

  1. Groupby: DataFrame をグループ化します。 3 つの列は groupby(['id', 'group', 'term']) を使用します。これにより、これらの列の一意の組み合わせに基づいてデータがグループに分割されます。
  2. Size: グループ化されたデータにサイズ関数を適用します。 size は、各グループ内の行数を計算します。これにより、各 ID グループ ペア内の各一意の用語の出現数が効率的にカウントされます。
  3. Unstack: groupby 操作の結果は、階層インデックス。 ID とグループのペアを表す行と一意の用語を表す列を含むテーブルを作成するには、unstack(fill_value=0) を使用できます。これにより、階層インデックスのスタックが解除され、欠落している値が 0 で埋められます。

結果の DataFrame は次のレイアウトのようになります:

ループを使用せずに、Pandas DataFrame 内の用語の出現を ID およびグループ別に効率的にグループ化し、カウントするにはどうすればよいですか?

例コード:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])

result = df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

print(result)
ログイン後にコピー

出力:

   term1  term2  term3
id group             
1   1      2      1
2   2      2      1
   3      1      0
ログイン後にコピー

パフォーマンス:

大規模なデータセットの場合、 groupby 操作と size 操作は、計算コストが高くなる可能性があります。次のコードは、1,000,000 行の DataFrame をグループ化してカウントするためのタイミング統計を提供します。

df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
                       group=np.random.choice(20, 1000000),
                       term=np.random.choice(10, 1000000)))

%timeit df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)
ログイン後にコピー

以上がループを使用せずに、Pandas DataFrame 内の用語の出現を ID およびグループ別に効率的にグループ化し、カウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート