1. ホーム
  2. python

[解決済み] データフレームにGroupbyの値カウントを行う pandas

2022-03-02 06:54:42

質問

以下のようなデータフレームがあります。

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'])

でグループ化したい idgroup で、このid, groupのペアの各項目の数を計算する。

だから、最終的にはこんな感じになるんです。

ですべての行をループさせることで、やりたいことを実現できました。 df.iterrows() を作成し、新しいデータフレームを作成する必要がありますが、これは明らかに非効率的です。(役に立つなら、私は事前にすべての用語のリストを知っていて、それらのうちの〜10があります)。

グループ化してから値をカウントする必要があるようなので、試しに df.groupby(['id', 'group']).value_counts() という理由でうまくいきません。 値_回数 は、dataframe ではなく groupby 系列に対して操作します。

どうにかしてループさせずに実現できないでしょうか?

どのように解決するのですか?

私は groupbysize

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


タイミング

1,000,000行

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