学校のテスト結果のデータを例に、forループを用いて複数条件に当てはまるデータを抽出したいと考えています。
以下のデータにおいて、ClassがA~Dのものをキーとし、EnglishとMathが70点より高いデータを抽出します。
試したコードによる結果と本来得られる結果が異なり、間違えている箇所の検討がつかず質問させていただきました。
素人質問で恐縮ですが、分かる方がいらっしゃたら教えていただけると幸いです。
【df1】(今回扱うデータ)
Class | Name | English | Math | Science | Society |
---|---|---|---|---|---|
A | 田中 | 63 | 75 | 68 | 82 |
A | 山田 | 74 | 72 | 83 | 86 |
B | 高橋 | 59 | 65 | 71 | 81 |
B | 佐藤 | 70 | 71 | 74 | 81 |
C | 吉田 | 66 | 72 | 61 | 73 |
C | 斎藤 | 72 | 67 | 58 | 69 |
C | 小池 | 60 | 78 | 61 | 66 |
D | 高田 | 88 | 91 | 92 | 80 |
D | 橋本 | 60 | 79 | 68 | 77 |
D | 工藤 | 79 | 83 | 85 | 90 |
※データは一部である。実際はClassはA~Zまで存在するものとする。
実際に試したコードが以下になります。
【試したコード】
Python
1 2for i in ['A', 'B', 'C', 'D']: 3 df2 = df1[(df1['Class']==i) & ((df1['English']>70) & (df1['Math']>70))] 4df2
【実行した結果】
Class | Name | English | Math | Science | Society |
---|---|---|---|---|---|
D | 高田 | 88 | 91 | 92 | 80 |
D | 工藤 | 79 | 83 | 85 | 90 |
###### |
【本来得られると思った結果】
Class | Name | English | Math | Science | Society |
---|---|---|---|---|---|
A | 山田 | 74 | 72 | 83 | 86 |
B | 佐藤 | 70 | 71 | 74 | 81 |
D | 高田 | 88 | 91 | 92 | 80 |
D | 工藤 | 79 | 83 | 85 | 90 |
forループを回すとき、リストの最後のキーであるDのみ実行されてしまうようです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 19:38