Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

つとむ先生のpandasドリル【ピボットテーブルを戻すには?】

f:id:kenken0326:20200828161321p:plain

f:id:kenken0326:20191021153602p:plain
tsutomu こんにちはPyQチームのtsutomuです。
pandasドリル第9回の問題は「ピボットテーブルを戻すには?」です。

つとむ先生の紹介

20数年、最適化関連の案件に従事するビープラウドの技術士(情報工学)。2014年より最適化のモデル作成にPythonを使い始め、効率的に開発できるようになる。東京海洋大学、青山学院大学、慶應義塾大学に非常勤講師としての勤務経験がある。また、オペレーションズ・リサーチ学会に約30年所属し、理事を2期務めた。
主な著書はモデリングの諸相Python言語によるビジネスアナリティクス今日から使える!組合せ最適化データ分析ライブラリーを用いた最適化モデルの作り方

問題

f:id:kenken0326:20191021153602p:plain
tsutomu DataFrame型の変数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回【値の種類ごとに新しい列を作成するには】はこちらからご覧ください。

blog.pyq.jp

Copyright ©2017- BeProud Inc. All rights reserved.