したいこと
太郎、次郎、三郎、四郎、五郎がテストを受け、成績はそれぞれ以下の通りでした。
名前 (name) | 点数 (score) |
---|---|
太郎 (Taro) | 300 |
次郎 (Jiro) | 250 |
三郎 (Saburo) | 80 |
四郎 (Shiro) | 200 |
五郎 (Goro) | 270 |
このDataFrameを使って以下のことをしたいとします。
- 100点以上を合格に、100点未満を不合格にしたい。
- 成績によって3ランクに分けたい。 (250点以上をAランク、100点未満をCランク、それ例外をBランク)
いきなり結論のコード
サクッと動作確認コーナー
- 下にある実行ボタンで動作確認できます。
- コードを書き換えることもできます。
- コードを元に戻したい場合は、このページをリロードして下さい。
ケース1: 100点以上を合格に、100点未満を不合格にしたい場合
ケース2: 成績によって3ランクに分けたい場合
コード全容
ケース1: 100点以上を合格に、100点未満を不合格にしたい場合
import pandas as pd
df = pd.DataFrame({
'name': ['Taro', 'Jiro', 'Saburo', 'Shiro', 'Goro'],
'score': [90, 80, 30, 50, 60]
})
# 40点以上を合格に、40点未満を不合格にする
df.loc[df['score'] >= 40, 'result'] = '合格'
df.loc[df['score'] < 40, 'result'] = '不合格'
print(df)
ケース2: 成績によって3ランクに分けたい場合
import pandas as pd
df = pd.DataFrame({
'name': ['Taro', 'Jiro', 'Saburo', 'Shiro', 'Goro'],
'score': [90, 80, 30, 50, 60]
})
# 80点以上をAランク、40点未満をCランク、その間をBランクにする
df.loc[df['score'] >= 80, 'result'] = 'Aランク'
df.loc[(df['score'] < 80) & (df['score'] >= 40), 'result'] = 'Bランク'
df.loc[df['score'] < 40, 'result'] = 'Cランク'
print(df)
解説
それでは簡単に解説していきます。
df.loc[df['score'] >= 40, 'result'] = '合格'
こういった方法で、条件に一致する行の指定カラムに、値をいれることができます。
ここでは、score
が40以上のresult
カラムに合格
という文字列を格納しています。
是非、サクッと動作確認コーナーで、色々といじってみて下さい。
また、複数の条件で絞り込みたい場合は、以下のように書けます。
df.loc[(df['score'] < 80) & (df['score'] >= 40), 'result'] = 'Bランク'
()
でくくって&
で指定するだけです。
この&
を|
にすれば、ORで指定することもできます。
さいごに
今日は、DataFrameで条件に合った行のみを編集する方法について、記事にしました。
DataFrameは色々な書き方があるので、もっと簡単にかける方法があるよってことであれば、Twitter等からご連絡頂けると嬉しいです!
最後まで読んで頂き、ありがとうございました。