df.groupby
を用いてDataFrameの値を合計した列を追加するには?」です。
つとむ先生の紹介
20数年、最適化関連の案件に従事するビープラウドの技術士(情報工学)。2014年より最適化のモデル作成にPythonを使い始め、効率的に開発できるようになる。東京海洋大学、青山学院大学、慶應義塾大学、上智大学に非常勤講師としての勤務経験がある。また、オペレーションズ・リサーチ学会に約30年所属し、理事を2期務めた。
主な著書はモデリングの諸相、Python言語によるビジネスアナリティクス、今日から使える!組合せ最適化、データ分析ライブラリーを用いた最適化モデルの作り方
問題
個人(Name)
ごとの得点(Point)
の合計(Total)
の列を追加した表を作成し、変数result
に入れてください。
ヒント
df.groupby
が使えます。
変数resultに入るべきDataFrame
Name | Subject | Point | Total | |
---|---|---|---|---|
0 | Alice | 国語 | 87 | 159 |
1 | Alice | 算数 | 72 | 159 |
2 | Bob | 国語 | 65 | 157 |
3 | Bob | 算数 | 92 | 157 |
問題で使うDataFrame
import pandas as pd df = pd.DataFrame( [ ['Alice', '国語', 87], ['Alice', '算数', 72], ['Bob', '国語', 65], ['Bob', '算数', 92], ], columns=['Name', 'Subject', 'Point']) df
変数dfの内容
Name | Subject | Point | |
---|---|---|---|
0 | Alice | 国語 | 87 |
1 | Alice | 算数 | 72 |
2 | Bob | 国語 | 65 |
3 | Bob | 算数 | 92 |
回答
result = df.join(df.groupby('Name').Point.sum().rename('Total'), 'Name')
解説
以下のようにgroupby
でName
ごとのPoint
の合計を求めます。
df.groupby('Name').Point.sum()
rename()
でSeriesの名前をTotal
に変更します。
df.groupby('Name').Point.sum().rename('Total')
join
で結合します。
df.join(df.groupby('Name').Point.sum().rename('Total'), 'Name')
前回の問題
第10回【別のDataFrameの列を結合するには?】はこちらからご覧ください。