pandasドリル第9回の問題は「ピボットテーブルを戻すには?」です。
つとむ先生の紹介
20数年、最適化関連の案件に従事するビープラウドの技術士(情報工学)。2014年より最適化のモデル作成にPythonを使い始め、効率的に開発できるようになる。東京海洋大学、青山学院大学、慶應義塾大学に非常勤講師としての勤務経験がある。また、オペレーションズ・リサーチ学会に約30年所属し、理事を2期務めた。
主な著書はモデリングの諸相、Python言語によるビジネスアナリティクス、今日から使える!組合せ最適化、データ分析ライブラリーを用いた最適化モデルの作り方
問題
変数df1
には、前問の結果のピボットテーブルが入っています(変数df1
は問題で使うDataFrame
すぐ下にあります)。
df1に対して、下記のように教科をSubject列に、得点をPoint列にしてください。
結果は、変数resultに入れてください。
変数resultに入るべき内容
Name | Subject | Point | |
---|---|---|---|
0 | Alice | 国語 | 87 |
1 | Bob | 国語 | 65 |
2 | Alice | 算数 | 72 |
3 | Bob | 算数 | 92 |
問題で使うDataFrame
import pandas as pd df1 = pd.DataFrame( [ [87, 72], [65, 92], ], columns=pd.Series(['国語', '算数'], name='Subject'), index=pd.Index(['Alice', 'Bob'], name='Name')) df1
変数df1の内容
Subject | 国語 | 算数 |
---|---|---|
Name | ||
Alice | 87 | 72 |
Bob | 65 | 92 |
回答
result = df1.reset_index().melt('Name', value_name='Point')
解説
pivot_table
と逆の処理は、melt
になります。
- 第1引数に、識別用の項目のリストを指定します。
- 第2引数に、値の項目を指定します。
Nameはインデックスなので、一旦reset_index
で列にしてから、melt
の第1引数に指定します。
前回の問題
第8回【値の種類ごとに新しい列を作成するには】はこちらからご覧ください。