質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1519閲覧

forループにより複数条件でデータを抽出する

taka0606

総合スコア9

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/06/30 18:33

学校のテスト結果のデータを例に、forループを用いて複数条件に当てはまるデータを抽出したいと考えています。

以下のデータにおいて、ClassがA~Dのものをキーとし、EnglishとMathが70点より高いデータを抽出します。

試したコードによる結果と本来得られる結果が異なり、間違えている箇所の検討がつかず質問させていただきました。
素人質問で恐縮ですが、分かる方がいらっしゃたら教えていただけると幸いです。

【df1】(今回扱うデータ)

ClassNameEnglishMathScienceSociety
A田中63756882
A山田74728386
B高橋59657181
B佐藤70717481
C吉田66726173
C斎藤72675869
C小池60786166
D高田88919280
D橋本60796877
D工藤79838590

※データは一部である。実際は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

【実行した結果】

ClassNameEnglishMathScienceSociety
D高田88919280
D工藤79838590
######

【本来得られると思った結果】

ClassNameEnglishMathScienceSociety
A山田74728386
B佐藤70717481
D高田88919280
D工藤79838590

forループを回すとき、リストの最後のキーであるDのみ実行されてしまうようです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

forループでdf2に代入し、毎回df2を書き換えていることになるので、最後に代入したDのみが残るのは当たり前なのかなと思います。この場合、代入ではなく、appendして追加していくといいと思います。

python

1import pandas as pd 2df1 = pd.DataFrame([["A",100,100],["A", 50,40],["B",70,90],["C",80,90],["D",71,80]],columns=["Class", "English","Math"]) 3# 空のデータフレームを作る 4df2 = df1.iloc[0:0] 5for i in ['A', 'B', 'C', 'D']: 6 temp = df1[(df1['Class']==i) & ((df1['English']>70) & (df1['Math']>70))] 7 df2 = df2.append(temp, ignore_index=True) 8df2

結果

Class English Math 0 A 100 100 1 C 80 90 2 D 71 80

投稿2020/06/30 19:13

編集2020/06/30 19:13
Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka0606

2020/06/30 19:38

回答ありがとうございます。基本的な知識の理解が足りていなかったのがよく分かりました。 周りに聞ける人がいないので素人質問に親切に回答していただき本当に助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問