0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pandasのDataFrameで列ごと、行ごとに処理をする方法

Posted at

やりたいこと・やり方

pandasのDataFrameにおいて、列の要素や行ごとにfor文を回すように処理したいことがあると思います。
そんな時はapply()を使えば良いと分かりました。

想定する場面

5人の学生が数学と英語のテストを受け、その合計点で合否判定を出す。

ソースコード

main.py
import pandas as pd

def absent_result(x):
    """未受験の場合は30点とする"""

    if x == "未受験":
        return 30
    else:
        return x

def calculate_total_score(row):
    """数学と英語の合計点を出す"""

    return row['数学'] + row['英語']

def judge_pass_or_failure(x):
    """数学と英語の合計点が100点以上を合格、100点未満を不合格とする"""

    if x >= 100:
        return '合格'
    else:
        return '不合格'

if __name__ == "__main__":
    # データ準備
    name = ['田中', '伊藤', '鈴木', '加藤', '島田']
    math_score = [70, 38, 25, 40, '未受験']
    english_score = [90, 56, 44, 24, 89]

    df = pd.DataFrame({
        '名前': name,
        '数学': math_score,
        '英語': english_score
    })

    # 元データの出力
    print("### 元データ ###")
    print(df)
    print("")

    # 未受験者の処理
    df['数学'] = df['数学'].apply(absent_result)
    # 数学と英語の合計点の算出
    df['合計点'] = df.apply(calculate_total_score, axis=1)
    # 成績順に並び替え
    df = df.sort_values('合計点', ascending=False)
    # 合否判定
    df['判定'] = df['合計点'].apply(judge_pass_or_failure)

    print("### 最終結果 ###")
    print(df)

出力結果

### 元データ ###
   名前   数学  英語
0  田中   70  90
1  伊藤   38  56
2  鈴木   25  44
3  加藤   40  24
4  島田  未受験  89

### 最終結果 ###
   名前  数学  英語  合計点   判定
0  田中  70  90  160   合格
4  島田  30  89  119   合格
1  伊藤  38  56   94  不合格
2  鈴木  25  44   69  不合格
3  加藤  40  24   64  不合格

おわりに

4本目の記事になりました。最後までご覧いただきありがとうございました!
感想やアドバイス、何でもコメントお待ちしています。

0
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?