Pandas의 열 값을 기반으로 데이터 프레임 행을 필터링하는 방법

Suraj Joshi 2023년1월30일
  1. 특정 열 값을 기준으로 Pandas 행 선택
  2. 특정 열 값을 포함하지 않는 Pandas 행을 선택하십시오
  3. 열 값이 특정 값보다 크거나 작은 Pandas 행을 선택하십시오
  4. 여러 열 값을 기반으로 Pandas 행 선택
  5. 여러 조건이있는 DataFrame 행 선택
Pandas의 열 값을 기반으로 데이터 프레임 행을 필터링하는 방법

단일 또는 다중 열 값을 기준으로DataFrame의 행을 선택할 수 있습니다. 또한 하나 이상의 조건을 만족하거나 만족시키지 못하는 DataFrame에서 행을 가져올 수 있습니다. 부울 인덱싱, 위치 인덱싱, 레이블 인덱싱 및 query() 메서드를 사용하여이 작업을 수행 할 수 있습니다.

특정 열 값을 기준으로 Pandas 행 선택

열의 특정 값을 포함하거나 포함하지 않는 DataFrame에서 Pandas 행을 선택할 수 있습니다. 열 값을 기준으로 DataFrame을 필터링하는 데 널리 사용됩니다.

특정 열 값을 포함하는 Pandas 행을 선택하십시오

부울 인덱싱을 사용하여 필터링

부울 인덱싱에서는 먼저 열에 특정 요소가 포함되어 있는지 여부를 나타내는 일련의 부울 값인 마스크를 생성합니다.

df_mask = df["col_name"] == "specific_value"

그런 다음이 마스크를 원래 DataFrame에 적용하여 필요한 값을 필터링합니다.

filtered_df = df[df_mask]

이것은 열 col_name에 대해 specific_value가있는 행만 포함하는 필터링 된 DataFrame을 반환합니다.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
filtered_df = df[df_mask]
print(filtered_df)

출력:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

이것은dfSales 값이300 인 모든 행을 제공합니다.

위치 인덱싱을 사용하여 필터링

부울 인덱싱과 비슷하지만 추가 단계가 필요합니다. 이 방법에서는 먼저 부울 마스크를 만든 다음 부울 마스크에 ‘참’값이있는 위치를 찾습니다. 그런 다음 마스크에서True 값을 가진 모든 위치를iloc()메소드에 전달하여 원하는 모든 행만 선택되도록합니다.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
positions = np.flatnonzero(df_mask)
filtered_df = df.iloc[positions]
print(filtered_df)

출력:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

이것은 또한 dfSales 값이300 인 모든 행을 제공합니다.

Pandas 체인

또한 Pandas 체인을 사용하여 Pandas 데이터 프레임 필터를 열 값으로 필터링 할 수 있습니다. 이 방법에서는 DataFrame의 요소 별 동등성을 비교하기 위해 값을 확인해야하는 DataFrame 열에 pandas.DataFrame.eq() 메서드를 사용합니다.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df[df.Sales.eq(300)]
print(filtered_df)

출력:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

pandas.DataFrame.query()

pandas.DataFrame.query()를 사용하여 Pandas에서 열 값으로 행을 선택할 수 있습니다.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df.query("Sales == 300")
print(filtered_df)

출력:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

기존 DataFrame을 업데이트하려면 쿼리 방법에서inplace=True를 설정할 수 있습니다.

특정 열 값을 포함하지 않는 Pandas 행을 선택하십시오

특정 열 값을 포함하지 않는 Pandas 행을 선택하는 방법은 특정 열 값을 가진 Pandas 행을 선택하는 방법과 유사합니다. 마스크 나 쿼리를 만들 때==!=로 바꾸어 열에 특정 값이 포함되지 않는 조건 만 변경하면됩니다.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] != 300
filtered_df = df[df_mask]
print(filtered_df)

출력:

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Sales값이 300이 아닌 df의 모든 행을 선택합니다.

열 값이 특정 값보다 크거나 작은 Pandas 행을 선택하십시오

특정 값보다 크거나 작은 열 값을 가진 Pandas 행을 선택하려면 마스크 나 쿼리를 만드는 동안>,<=,>=와 같은 연산자를 사용합니다.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] >= 300
filtered_df = df[df_mask]
print(filtered_df)

출력:

       Date  Sales  Price
1  April-11    300      1
2  April-12    400      2
4  April-14    300      3
5  April-16    300      2

결과적으로 Sales값이 300이상인 DataFrame이됩니다.

여러 열 값을 기반으로 Pandas 행 선택

DataFrame에서 열의 특정 값을 기반으로 행을 선택하는 방법을 소개했습니다. 이 섹션에서는 여러 열 값을 기반으로 Pandas 행을 선택하는 방법에 대해 설명합니다.

여러 열 값 중 하나를 포함하는 Pandas 행을 선택하십시오

여러 열 값 중 하나를 포함하는 Pandas 행을 선택하려면 pandas.DataFrame.isin(values)를 사용하여 DataFrame의 각 요소가 값에 포함되어 있는지 여부를 나타내는 부울의 DataFrame을 반환합니다.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[df.Sales.isin(values)]
print(filtered_df)

출력:

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Sales 값이200 또는400 인 DataFrame의 모든 행을 필터링합니다.

지정된 여러 열 값 중 하나를 포함하지 않는 Pandas 행을 선택하십시오

여러 개의 지정된 열 값 중 하나를 포함하지 않는 DataFrame의 행을 선택하기 위해 앞에~기호를 배치하여 pandas.DataFrame.isin(values)에서 반환 된 부울의 DataFrame을 무효화합니다.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[~df.Sales.isin(values)]
print(filtered_df)

출력:

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Sales 값이200 또는400이 아닌 DataFrame의 모든 행을 필터링합니다.

여러 조건이있는 DataFrame 행 선택

여러 열의 행 값을 고려하여 행을 필터링하려면 여러 조건을 만들고&연산자와 결합합니다. 이제 행은 모든 열의 조건을 만족할 때만 선택됩니다.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values_1 = [200, 400]
values_2 = [2, 3]
filtered_df = df[df.Sales.isin(values_1) & ~df.Price.isin(values_2)]
print(filtered_df)

출력:

       Date  Sales  Price
3  April-13    200      4

Sales 값이200 또는400이고Price 값이 2 또는 3이 아닌 DataFrame의 모든 행을 필터링합니다. 출력의 행은 전체 DataFrame의 두 조건 만 만족시킵니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

관련 문장 - Pandas DataFrame

관련 문장 - Pandas DataFrame Row