Pandas の特定の条件に基づいて DataFrame 列を作成する方法
-
Pandas の特定の条件に基づいて新しい
DataFrame
列を作成するためのリスト内包表記 -
Pandas の特定の条件に基づいて新しい
DataFrame
列を作成するNumPy
メソッド -
Pandas の特定の条件に基づいて新しい
DataFrame
列を作成するpandas.DataFrame.apply
-
Pandas の特定の条件に基づいて新しい
DataFrame
列を作成するpandas.Series.map()
DataFrame オブジェクトのリスト内包表記、NumPy
メソッド、apply()
メソッド、および map()
メソッドを使用して、Pandas の特定の条件に基づいて DataFrame
列を作成できます。
Pandas の特定の条件に基づいて新しい DataFrame
列を作成するためのリスト内包表記
さまざまなリスト内包表記を利用して、Pandas の特定の条件に基づいて新しい DataFrame
列を作成できます。リスト内包は、反復可能オブジェクトから新しいリストを作成する方法です。他の方法よりも非常に高速で簡単です。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df["Status"] = ["Senior" if s >= 400 else "Junior" for s in df["Salary"]]
print(df)
出力:
Name Joined date Salary Status
0 Hisila 2019-11-20 200 Junior
1 Shristi 2020-01-02 400 Senior
2 Zeppy 2020-02-05 300 Junior
3 Alina 2020-03-10 500 Senior
4 Jerry 2020-04-16 600 Senior
5 Kevin 2020-05-01 300 Junior
給与が 400 以上の場合は Senior
、それ以外の場合は Junior
の値を持つ df
に新しい列 Status
を作成します。
Pandas の特定の条件に基づいて新しい DataFrame
列を作成する NumPy
メソッド
NumPy メソッドを使用して、Pandas の特定の条件に基づいて DataFrame
列を作成することもできます。この目的のために、np.where()
メソッドと np.select()
メソッドを利用できます。
np.where()
メソッド
np.where()
は条件を入力として受け取り、指定された条件を満たす要素のインデックスを返します。条件が 1つしかない場合、このメソッドを使用して、Pandas の特定の条件に基づいて DataFrame 列を作成できます。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df["Status"] = np.where(df["Salary"] >= 400, "Senior", "Junior")
print(df)
出力:
Name Joined date Salary Status
0 Hisila 2019-11-20 200 Junior
1 Shristi 2020-01-02 400 Senior
2 Zeppy 2020-02-05 300 Junior
3 Alina 2020-03-10 500 Senior
4 Jerry 2020-04-16 600 Senior
5 Kevin 2020-05-01 300 Junior
np.where(condition, x, y)
は、条件が満たされた場合は x
を返し、そうでない場合は y
を返します。
上記のコードは、指定された条件が満たされた場合、値が Senior
である新しい列 Status
を df
に作成します。それ以外の場合、値はジュニア
に設定されます。
np.select()
メソッド
np.where()
は、条件リストと選択リストを入力として受け取り、条件に応じて、選択リストの要素から構築された配列を返します。2つ以上の条件がある場合、このメソッドを使用して、Pandas の特定の条件に基づいて DataFrame 列を作成できます。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
conditionlist = [
(df["Salary"] >= 500),
(df["Salary"] >= 300) & (df["Salary"] < 300),
(df["Salary"] <= 300),
]
choicelist = ["High", "Mid", "Low"]
df["Salary_Range"] = np.select(conditionlist, choicelist, default="Not Specified")
print(df)
出力:
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 black
2 Zeppy 2020-02-05 300 Low
3 Alina 2020-03-10 500 High
4 Jerry 2020-04-16 600 High
5 Kevin 2020-05-01 300 Low
ここで、行の条件リスト
の 1 番目の条件が満たされている場合、その特定の行の Salary_Range
列の値が選択リスト
の 1 番目の要素に設定されます。conditionlist
の他の条件も同様です。conditionlist
のどの条件も満たされない場合、その行の列 Salary_Range
の値は、np.where()
メソッドの default
パラメータの値に設定されます。たとえば、Not Specified
。
Pandas の特定の条件に基づいて新しい DataFrame
列を作成する pandas.DataFrame.apply
pandas.DataFrame.apply
は DataFrame を返します
DataFrame の特定の軸に沿って特定の関数を適用した結果として。
構文:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
func
は適用される関数を表します。
axis
は関数が適用される軸を表します。axis=1
または axis = 'columns'
を使用して、各行に関数を適用できます。
このメソッドを使用して、条件を確認し、新しい列のすべての行の値を設定できます。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
def set_values(row, value):
return value[row]
map_dictionary = {200: "Low", 300: "LOW", 400: "MID", 500: "HIGH", 600: "HIGH"}
df["Salary_Range"] = df["Salary"].apply(set_values, args=(map_dictionary,))
print(df)
出力:
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 MID
2 Zeppy 2020-02-05 300 LOW
3 Alina 2020-03-10 500 HIGH
4 Jerry 2020-04-16 600 HIGH
5 Kevin 2020-05-01 300 LOW
ここでは、df.apply()
を使用してすべての行に適用される関数 set_values()
を定義します。関数は、その行の Salary
列の値に応じて、Salary_Range
列の各行の値を設定します。Salary
列の値が指定された行の Salary_Range
列の値が何になるかを知るために、map_dictionary
を作成します。この方法は、新しい列に多数のオプションがある場合に、より高い柔軟性を提供します。
Pandas の特定の条件に基づいて新しい DataFrame
列を作成する pandas.Series.map()
pandas.Series.map()
を使用して新しい DataFrame
を作成することもできます Pandas の特定の条件に基づく列。このメソッドは Series
に対して要素ごとに適用され、辞書、関数、または Series
である可能性のある入力に基づいて、ある列から別の列に値をマッピングします。
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
map_dictionary = {200: "Low", 300: "LOW", 400: "MID", 500: "HIGH", 600: "HIGH"}
df["Salary_Range"] = df["Salary"].map(map_dictionary)
print(df)
出力:
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 MID
2 Zeppy 2020-02-05 300 LOW
3 Alina 2020-03-10 500 HIGH
4 Jerry 2020-04-16 600 HIGH
5 Kevin 2020-05-01 300 LOW
新しい列 Salary_Range
を作成し、map_dictionary
のキーと値のペアに応じて列の各行の値を設定します。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn関連記事 - Pandas DataFrame Column
- Pandas DataFrame の列ヘッダーをリストとして取得する方法
- Pandas DataFrame 列を削除する方法
- Pandas で DataFrame 列を日時に変換する方法
- Pandas 列の合計を取得する方法
- Pandas DataFrame 列の順序を変更する方法
- Pandas で DataFrame 列を文字列に変換する方法