質問: 何度も修正すみません。 下記表のデータ整理についておしえてください。 | クラス | 名前 | 前回の順位 | 今回の順位 | 塾の点数 | | --- | --- | --- | --- | --- | | 1組 | 田中 | 1 | 2 | 30 | | 1組 | 鈴木 | 2 | 3 | 40 | | 1組 | 佐藤 | 3 | 1 | 50 | | 2組 | 山本 | 1 | 2 | 60 | | 2組 | 中川 | 2 | 1 | 92 | | 2組 | 萩原 | 3 | 3 | 54 | | 3組 | 田中 | 2 | 1 | 44 | | 3組 | 斎藤 | 1 | 2 | 30 | PyathonのPandasを利用して、 各組の「塾の点数」が50点以下でかつ「前回の順位」が1位だった人がいるクラスの、 「今回の順位」の1位に人リストを作りたいのですがやり方がわかりません。 出力イメージは↓のような感じです。 | クラス | 名前 | 前回の順位 | 今回の順位 | 塾の点数 | | --- | --- | --- | --- | --- | | 1組 | 佐藤 | 3 | 1 | 50 | | 3組 | 田中 | 2 | 1 | 44 | ヒントだけでも教えていただけますと助かります。 よろしくお願いいたします。
回答: このような意図であっていますでしょうか? ``` クラス,名前,前回の順位,今回の順位,塾の点数 1組,田中,1,2,30 1組,鈴木,2,3,40 1組,佐藤,3,1,50 2組,山本,1,2,60 2組,中川,2,1,92 2組,萩原,3,3,54 3組,田中,2,1,44 3組,斎藤,1,2,30 ``` ``` import pandas as pd df = pd.read_csv('data.csv') ``` | クラス | 名前 | 前回の順位 | 今回の順位 | 塾の点数 | | --- | --- | --- | --- | --- | | 1組 | 田中 | 1 | 2 | 30 | | 1組 | 鈴木 | 2 | 3 | 40 | | 1組 | 佐藤 | 3 | 1 | 50 | | 2組 | 山本 | 1 | 2 | 60 | | 2組 | 中川 | 2 | 1 | 92 | | 2組 | 萩原 | 3 | 3 | 54 | | 3組 | 田中 | 2 | 1 | 44 | | 3組 | 斎藤 | 1 | 2 | 30 | ``` # 塾の点数が50点以下かつ前回の順位が1位の人のクラス一覧 classes = df[(df['塾の点数'] <= 50) & (df['前回の順位'] == 1)]['クラス'].unique() print(classes) # ['1組' '3組'] # (塾の点数が50点以下かつ前回の順位が1位の人のクラス) で今回の順位が1位の人 extract_df = df[(df['クラス'].isin(classes)) & (df['今回の順位'] == 1)] ``` | クラス | 名前 | 前回の順位 | 今回の順位 | 塾の点数 | | --- | --- | --- | --- | --- | | 1組 | 佐藤 | 3 | 1 | 50 | | 3組 | 田中 | 2 | 1 | 44 |