pandasドリル第14回の問題は「同一キーの値をリストにした辞書を作成するには?」です。
つとむ先生の紹介
20数年、最適化関連の案件に従事するビープラウドの技術士(情報工学)。2014年より最適化のモデル作成にPythonを使い始め、効率的に開発できるようになる。東京海洋大学、青山学院大学、慶應義塾大学、上智大学に非常勤講師としての勤務経験がある。また、オペレーションズ・リサーチ学会に約30年所属し、理事を2期務めた。フェロー。
主な著書はモデリングの諸相、Python言語によるビジネスアナリティクス、今日から使える!組合せ最適化、データ分析ライブラリーを用いた最適化モデルの作り方
問題
df
に、生徒のテストの結果が入っています。
dfを用いて、下記の辞書を作成し、変数result
に入れてください。
辞書は、キーがSubjectで、値がNameのリストになります。
辞書
{'国語': ['Alice', 'Bob'], '算数': ['Alice', 'Bob']}
変数dfの内容
Name | Subject | Point | |
---|---|---|---|
0 | Alice | 国語 | 87 |
1 | Alice | 算数 | 72 |
2 | Bob | 国語 | 65 |
3 | Bob | 算数 | 92 |
問題で使うDataFrame
import pandas as pd df = pd.DataFrame( [ ['Alice', '国語', 87], ['Alice', '算数', 72], ['Bob', '国語', 65], ['Bob', '算数', 92], ], columns=['Name', 'Subject', 'Point']) df
回答
result = df.groupby('Subject').Name.apply(list).to_dict()
解説
df.groupby('Subject').Name.apply(list)
とすると、下記のSeriesになります。
Subject
国語 [Alice, Bob]
算数 [Alice, Bob]
Name: Name, dtype: object
さらに、df.groupby('Subject').Name.apply(list).to_dict()
とすることで、目的の辞書になります。
{'国語': ['Alice', 'Bob'], '算数': ['Alice', 'Bob']}
お知らせ
PyQの「pandasチャレンジ」パートではこの問題を実際に手を動かしながら学べます。
PyQで学習中の方はぜひトライしてみてください。
pandasチャレンジその6 - Pythonのオンライン学習サービスPyQ(パイキュー)
前回の問題
第13回つとむ先生のpandasドリル【生徒ごとの教科名の一覧の列を追加するには?】は、こちらからご覧ください。