HOWTO · Pandas
열에서 Pandas 고유 값 가져 오기 및 정렬
이 튜토리얼은 Pandas DataFrame에서 열의 고유 한 값을 찾는 방법과이를 정렬하는 방법을 보여줍니다.
이 페이지의 내용
DataFrame의 열은 Pandas Series입니다. Series의 unique() 함수를 호출하면 값이 처음 나타난 순서대로 중복을 제외한 값을 얻을 수 있습니다. 해당 행과 다른 열도 필요하다면 drop_duplicates()를 사용하고, 값이나 행을 정렬하려면 Python의 sorted() 또는 Pandas의 sort_values()를 사용하세요.
예제에서는 직업과 부서가 들어 있는 작은 DataFrame 하나를 사용합니다. 다음 예제를 실행해 보세요. 코드와 출력에 표시되는 레이블은 영어로 유지됩니다.
import pandas as pd
df = pd.DataFrame({
"profession": ["designer", "engineer", "designer", "analyst"],
"department": ["product", "platform", "research", "finance"],
})
professions = df["profession"].unique()
print(professions)
print(type(professions).__name__)
<StringArray>
['designer', 'engineer', 'analyst']
Length: 3, dtype: str
StringArray
DataFrame 열에서 고유한 값 가져오기
df["profession"]을 선택하면 Series가 반환됩니다. 이 Series의 unique() 함수는 직업마다 중복되지 않는 값을 하나씩, 처음 나타난 순서대로 반환하며 값을 정렬하지는 않습니다. 구체적인 반환 형식은 Series의 dtype에 따라 달라집니다. 이 예제에서는 값에 Pandas 문자열 확장 dtype을 사용하므로 출력에 표시된 것처럼 결과는 StringArray입니다. 다른 dtype에서는 NumPy 배열이나 다른 확장 배열이 반환될 수 있습니다. 열 이름은 데이터에 맞게 바꾸세요. 고유한 값의 개수만 필요하다면 len(df["profession"].unique())를 사용하세요. 반면 len(df)는 직업이 중복된 행까지 포함해 전체 행 수를 셉니다. 다음 단계에서 일반 Python 리스트가 꼭 필요할 때는 결과에 .tolist()를 호출하세요. 아래 코드와 출력의 레이블 및 값은 영어로 유지됩니다.
열의 고유한 값마다 행 하나씩 유지하기
값만 모으는 대신 레코드를 유지하려면 DataFrame에 drop_duplicates(subset="profession")를 호출하세요. 결과도 DataFrame이므로 남은 각 행에 부서 정보가 포함됩니다. 기본적으로 직업마다 첫 번째 행이 유지됩니다. 표시된 결과에서는 두 번째 디자이너 행이 제거되고, 첫 번째 디자이너 행과 그 행의 제품 부서는 남습니다. 이 방법은 다른 기준으로 대표 행을 선택하지 않습니다. 다른 행을 유지해야 한다면 먼저 행을 정렬하거나 별도의 기준으로 선택하세요. 기본 설정에서는 원래 인덱스 레이블을 유지하므로 인덱스에 빈 번호가 생길 수 있습니다. 여러 열의 조합으로 중복 레코드를 정의하려면 열 이름 여러 개를 리스트로 만들어 subset에 전달할 수 있습니다. 아래 코드와 출력에 표시되는 열 레이블 및 값은 영어로 유지됩니다.
import pandas as pd
df = pd.DataFrame({
"profession": ["designer", "engineer", "designer", "analyst"],
"department": ["product", "platform", "research", "finance"],
})
unique_rows = df.drop_duplicates(subset="profession")
print(unique_rows.to_string(index=False))
print(type(unique_rows).__name__)
profession department
designer product
engineer platform
analyst finance
DataFrame
고유한 값 또는 DataFrame 행 정렬하기
Python 내장 함수 sorted()는 값을 오름차순으로 정렬한 새 리스트를 반환합니다. 고유한 값만 정렬하려면 unique()와 함께 사용하고, 중복을 남겨야 한다면 Series를 바로 정렬하세요. 내림차순으로 정렬하려면 sorted()에 reverse=True를 전달합니다.
정렬된 행과 다른 열의 데이터를 함께 유지하려면 sort_values(by="profession")를 사용하세요. 이 메서드는 DataFrame을 반환하며 기본값은 오름차순입니다. 내림차순으로 정렬하려면 ascending=False를 지정하세요. 두 방법은 결과가 다릅니다. 고유한 값을 정렬하면 리스트가 반환되고, 행을 정렬하면 행 데이터가 보존됩니다. 우선순위에 따라 여러 열을 정렬하려면 열 이름 리스트를 by에 전달할 수 있습니다. 아래 목록에는 직업 값만 들어 있지만, 마지막 출력은 모든 행과 부서를 유지하면서 직업을 엔지니어부터 분석가 순으로 정렬합니다. sort_values()는 ignore_index=True를 지정하지 않는 한 원래 인덱스 레이블을 유지합니다. 이 옵션을 사용하면 정렬된 결과에 새 순차 인덱스가 만들어집니다. 코드와 출력에 표시되는 열 레이블 및 값은 영어로 유지됩니다.
import pandas as pd
df = pd.DataFrame({
"profession": ["designer", "engineer", "designer", "analyst"],
"department": ["product", "platform", "research", "finance"],
})
print(sorted(df["profession"].unique()))
print(sorted(df["profession"].unique(), reverse=True))
print(df.sort_values(by="profession", ascending=False).to_string(index=False))
['analyst', 'designer', 'engineer']
['engineer', 'designer', 'analyst']
profession department
engineer platform
designer product
designer research
analyst finance