Pandas에서 주어진 조건에 따라 DataFrame 열을 만드는 방법

Suraj Joshi 2023년1월30일
  1. Pandas의 주어진 조건에 따라 새로운 DataFrame열을 생성하는 목록 이해
  2. Pandas에서 주어진 조건에 따라 새로운DataFrame 열을 생성하는NumPy 메소드
  3. Pandas의 주어진 조건에 따라 새로운DataFrame 열을 생성하는pandas.DataFrame.apply
  4. Pandas의 주어진 조건에 따라 새로운DataFrame 열을 생성하는pandas.Series.map()
Pandas에서 주어진 조건에 따라 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 이상인 경우 값이Seniordf에 새 열Status를 작성하고 그렇지 않으면Junior를 작성합니다.

Pandas에서 주어진 조건에 따라 새로운DataFrame 열을 생성하는NumPy 메소드

또한 NumPy 메소드를 사용하여 Pandas의 주어진 조건에 따라 DataFrame열을 만들 수 있습니다. 이를 위해 np.where()메소드와np.select()메소드를 활용할 수 있습니다.

np.where()메소드

np.where()는 조건을 입력으로 받아 주어진 조건을 만족하는 요소의 인덱스를 반환합니다. 이 방법을 사용하면 조건이 하나만있을 때 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를 반환합니다.

위의 코드는 주어진 조건이 만족되면 값이Seniordf에 새 열Status를 작성합니다. 그렇지 않으면 값은Junior로 설정됩니다.

np.select()메소드

np.where()는 조건 목록과 선택 목록을 입력으로 받아서 조건에 따라 선택 목록의 요소로 구성된 배열을 반환합니다. 이 방법을 사용하면 두 개 이상의 조건이있을 때 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

여기에서conditionlist의 첫 번째 조건이 행에 대해 충족되면 해당 특정 행에 대한Salary_Range 열의 값이choicelist의 첫 번째 요소로 설정됩니다. 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()함수를 정의합니다. 이 함수는 해당 행의Saryary 열 값에 따라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
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

관련 문장 - Pandas DataFrame Column

관련 문장 - Pandas Condition