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()
誰かの幸いになればいいとおもっています。