LoginSignup
5
4

More than 5 years have passed since last update.

pandas で groupby した後のはなし

Posted at

pandas で groupby する話

公式サイト:pandas.DataFrame.groupby

Qiita Pandas の groupby の使い方

Qiita Pandasでデータ集計をする際に最低限覚えておきたいメソッド

とっても便利でパワフルなpandasのgroupbyですが、この関数の返り値がオブジェクトなのが問題です。というか、僕にとっては問題でした。

pandas で groupby した後のはなし

print(data.groupby(['col1', 'col2']))

した時に表示されるものの絶望は忘れません。

多くのチュートリアルは、data.groupby(['col1', 'col2'])の後に、.mean() .max() .sum() などの処理をする前提で書かれています。

print(data.groupby(['col1', 'col2']).mean())

とかすると、中身のデータは平均化されるけど、とりあえず見ることはできます。

ちゃんと公式のマニュアル Group By: split-apply-combineに他の処理方法が書かれてます。

他にもstackoverflowを漁っていると lambda を使う面白い記事がありました
元記事は見失ったのですが、僕が書いたプログラムの一例です。

とある生放送プラットフォームの視聴者側の会話やアイテムのログのdataframeからの抽出です。

Dataframeのdfでcol:idol_nameがmenberに含まれるものを抽出して、さらに視聴者のuseridとその視聴者のpointを選択。
そこから、groupbyのuseridにして、user_idごとの合計値sum()を計算します。
ここまではごく普通のgroupbyなのですが、ここからさらに、pointの合計値から足切り(> limit)をするために、.loc[lambda]を使ってます。
.loc[lambda]を知るまでは、.sum()以降を二行に分けて、無駄に変数を多く用意していました。

df[df["idol_name"]==menber][["userid","point"]].groupby(by=["userid"]).sum().loc[lambda df2: df2["point"]> limit].sort_values(by=["point"]).index.tolist() 

誰かの幸いになればいいとおもっています。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4