HOWTO · Pandas

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

DataFrame 객체에 대한 목록 이해 기술, 숫자 메서드, apply() 메서드 및 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 이상인 경우 값이Senior 인df에 새 열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를 반환합니다.

위의 코드는 주어진 조건이 만족되면 값이Senior 인df에 새 열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의 키-값 쌍에 따라 열의 각 행 값을 설정합니다.