本記事では、PythonでExcelのIF関数のように条件分岐で値を設定する方法をご紹介します。
Pythonの実行環境
今回は、以下の実行環境でプログラムを実行しています。
・Python 3.7.6
・Jupyterlab 1.2.6
・Pandas:1.1.2
テストデータは、次のような予算管理表を使います。
ファイル名は「テストデータ.xlsx」で、シート名は「予算管理表」です。
■予算管理表
本記事で、利用するライブラリはPandasです。
そして、テストデータの予算管理表をdfとして読み込んでおきます。
import pandas as pd
df = pd.read_excel('テストデータ.xlsx', sheet_name = '予算管理表')
PythonでExcelのIF関数のように条件分岐で値を設定する方法(2分類)
まずは、次の条件の2分類を考えます。
・「2021年度」列が、5000越の場合は、「大型件名」とする
・それ以外は、「小型件名」とする
これをExcelで行うと、IF関数を使って、次のようになります。
これをPythonで書くと次のようになります。
df['件名分類(2分類)'] = df['2021年度'].apply(lambda x : '大型件名' if x>5000 else '小型件名')
このように、apply()とlambda関数、IF文の組み合わせで書けます。
結果は、Excelと同じになります。
ただ、apply()とlambda関数、IF文の組み合わせでは、2分類までしかできません。elifが使えないのです。。
次は、3分類以上に分類する方法をみていきます。
PythonでExcelのIF関数のように条件分岐で値を設定する方法(多値分類)
ここでは、次の条件の3分類を考えます。
・「2021年度」列が、5000越えの場合は、「大型件名」とする
・「2021年度」列が、5000以下で2000越えの場合は、「中型件名」とする
・それ以外は、「小型件名」とする
これをExcelで行うと、IF関数を入れ子にして次のように書きます。
これによって、「件名番号」列が'1006'が「中型件名」となり、3分類になりました。
本記事の最重要箇所
Pythonでは、自分で関数を作って、map()を使って、3分類以上の条件分岐ができるようになります。
まずは、次のように3分類する関数を作ります。
def check_kingaku(x):
'''
金額の値によって「大型件名」、「中型件名」、「小型件名」を分類する
Parameter
-------------------
x : 金額
Return
-------------------
xが5000越えの場合:'大型件名'
xが5000以下で2000越えの場合:'中型件名'
xが2000以下の場合:'小型件名'
'''
if x > 5000:
return '大型件名'
elif x > 2000:
return '中型件名'
else:
return '小型件名'
関数の処理概要は、上のコメントの通りです。
IF文にelifを使って、条件分岐を増やしたものになります。
次に、この関数を列のそれぞれの値に適用するために、map()を使います。
map()は次のように書きます。
df['件名分類(3分類)'] = df['2021年度'].map(check_kingaku)
列を指定して、map()の引数に自分で作った関数名を入れるだけです。
この結果は、次の通りになります。
Excelの結果と同じように、「件名番号」列が'1006'が「中型件名」となり、3分類になっていることがわかります。
以上、PythonでExcelのIF関数のように条件分岐で値を設定する方法を、多値分類も含めて説明してきました。
最後まで読んでいただき、ありがとうございました。