【pandas.DataFrame】グループごとの集計値を、新規カラムとして追加する

競艇や競馬の過去データで、「レースごとのタイムの平均」 といった集計値を新規カラムとして追加する、などという処理を簡単にしたいなあ、なんて色々調べてる際に、groupby().transform()というとても便利なメソッドを見つけたので、備忘録がてら書き残します。

公式ドキュメントはこちら。

目次

結論

# サンプルデータ用意
data = {
    'class': ['A', 'A', 'B', 'C', 'B', 'A', 'C', 'C', 'C'], 
    'point': [80, 68, 50, 9, 54, 93, 3, 18, 33]
}
df = pd.DataFrame(data)

# グループごとの集計値カラム追加(ここでは平均値)
df['point_mean'] = grouped.transform('mean')['point']

噛み砕いて

サンプルデータ

まずサンプルとなるデータを作成します。

分かりやすいように、あるテストの点数と、その人が所属するクラスが入力されたデータを想定します。

data = {
    'class': ['A', 'A', 'B', 'C', 'B', 'A', 'C', 'C', 'C'], 
    'point': [80, 68, 50, 9, 54, 93, 3, 18, 33]
}
df = pd.DataFrame(data)

ただのgroupby()

グルーピングし、主計値(平均)を計算してみます。

grouped = df.groupby('class')
grouped.mean()

各グループの平均値を算出できました。グループAは優秀ですね。

transform()メソッド

このままですと、グループの数しか行が作成されません。

しかし、transform()メソッドを使用することで、もとのデータの行数を維持したまま集計値を算出してくれます。

grouped.transform('mean')

こうすると分かりやすいでしょうか。

df['point_mean'] = grouped.transform('mean')['point']

1行でグループごとの集計値を追加することができました。

案件、ありますか?

「メインの仕事があるけれど、週1、2日だけできる仕事ないかな、、、」

「ある程度スキルが身に付いてはきたけど、そのスキルを活用できる場が欲しい」

なんて悩みが以前はありました。

自分で仕事を探しに行くのも大事ですが、蛇の道は蛇。その道の人に頼むことで、自分だけでは見つからないような案件に携わることができます。

IT PRO パートナーズでは、簡単に無料でアカウントを登録でき、さらにはエージェントさんに希望の働き方・案件の種類を提示することでお仕事を紹介してくれます!

登録自体も非常に簡単で、「エージェントさんとの面談を希望する」という欄にチェックをするだけで、エージェントさんから直接連絡をいただくことができます。

驚くほど簡単で正直拍子抜けしてしまいました笑

もしお仕事探しに困っておりましたら、一度登録し案件を眺めてみることをおすすめします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

勤めていた設計会社を退社し、フリーランスとして活動しています
また、趣味で主にpyhonを用いて機械学習を行なっています!
現在競艇の予測モデルの開発中です。

コメント

コメントする

目次