그룹 내에서 Pandas DataFrame 순위 지정

Salman Mehmood 2024년2월15일
그룹 내에서 Pandas DataFrame 순위 지정

이 문서에서는 오름차순 및 내림차순으로 데이터 순위를 지정하는 방법에 대해 설명합니다. 또한 Pandas의 groupby() 기능을 사용하여 데이터 그룹의 순위를 지정하는 방법도 배웁니다.

rank() 함수를 사용하여 Python에서 Pandas DataFrame 순위 지정

순위는 우리가 데이터를 조작하거나 예를 들어 일부 순위를 기반으로 이익이 높은지 낮은지 파악하려고 할 때마다 일반적인 절차입니다. 때때로 시간 관리는 상위 10개 제품 또는 하위 10개 제품이 무엇인지 아는 데 관심이 있습니다.

Pandas에서 데이터 순위 지정은 시리즈의 요소를 해당 값에 따라 순위 지정하거나 정렬하려는 작업입니다. rank 작업은 SQL ROW_NUMBER에서 영감을 얻거나 ROW_NUMBER 작업에서 기대할 수 있는 대부분의 결과는 Pandas의 rank 작업에서 기대할 수 있습니다.

예제를 살펴보기 위해 코드를 작성하는 것으로 시작하겠습니다.

우리는 슈퍼스토어의 데이터 세트를 로드하고 데이터에서 월과 연도를 추출했습니다. 그리고 월별 및 연도별 판매 가치에 대한 피벗 테이블을 만들었습니다.

import numpy as np
import pandas as pd
import datetime

Store_Data = pd.read_excel("demo_Data.xls")
Store_Data["OrderDateMonth"] = Store_Data["Order Date"].apply(lambda x: x.month)
Store_Data["OrderDateYear"] = Store_Data["Order Date"].apply(lambda x: x.year)

Mon_Year_Sales = pd.pivot_table(
    Store_Data,
    index=["OrderDateMonth"],
    columns=["OrderDateYear"],
    aggfunc="sum",
    values="Sales",
)
Mon_Year_Sales

따라서 피벗 테이블을 살펴보면 다음과 같습니다.

Pandas 피벗 테이블

오름차순 및 내림차순으로 DataFrame 순위 지정

이제 값을 기준으로 이 데이터의 순위를 지정해야 합니다. Pandas 라이브러리에는 ascending 매개 변수를 선택적으로 사용하고 기본적으로 데이터를 오름차순으로 정렬하는 rank() 기능이 있습니다.

rank() 함수에는 shift+tab+tab를 눌러 볼 수 있는 몇 가지 인수가 있습니다. 그것은 우리에게 모든 주장과 정의를 보여줄 것입니다.

Pandas 순위 함수 인수

계속해서 Mon_Year_Sales에 순위를 적용하고 실행하면 이 모든 열을 가져와 숫자 형식이 무엇이든 숫자로 변환하고 순위를 오름차순으로 수행합니다.

Mon_Year_Sales.rank()

Pandas 순위 월별 판매 - 오름차순

순위는 주어진 값을 사용하여 계산됩니다.

2014년 두 번째 행에서 이 데이터가 첫 번째 순위입니다. ascending 인수에 값을 전달하지 않았기 때문에 오름차순으로 정렬됩니다.

ascending 인수 False를 전달하면 값의 내림차순으로 순서가 재정렬됩니다.

Mon_Year_Sales.rank(ascending=False)

이제 9월은 2014년 가장 높은 판매액을 기록하여 1위를 차지하게 되었습니다.

Pandas 순위 월별 매출 - 내림차순

groupby() 메서드를 사용하여 Pandas의 그룹을 기반으로 데이터 순위 지정

전체가 아닌 값 그룹을 기반으로 데이터 순위를 지정하려는 특정 요구 사항이 있습니다. 데이터가 다음과 같다고 가정합니다.

그룹 기반 Pandas 순위 데이터

전체 순위 대신 이익 값에 대한 범주 사이에서 순위를 매기고 싶다고 가정합니다.

Group_Data = (
    Store_Data.groupby(["OrderDateYear", "Category"])
    .agg({"Profit": "sum"})
    .reset_index()
)
Group_Data

그룹 기반 Pandas 순위 데이터 - 출력 1

특정 연도의 경우 범주의 수익 순위를 지정하려고 하므로 2014년에는 두 번째 값이 2014년 내 최대값이므로 두 번째 값이 첫 번째 순위가 되기를 원합니다.

마찬가지로 2015년에도 전체 순위를 계속해서 올리는 것보다 1, 2, 3에서 다시 시작하는 것과 같은 별도의 순위를 원합니다. 그런 다음 어떤 범주가 가장 높은 순위를 가지는지 알고 싶습니다. 그러면 어떻게 달성할 수 있습니까?

목표를 달성하기 위해 연도별로 그룹화한 다음 이익을 선택한 다음 오름차순 인수를 거짓으로 설정합니다. 즉, 최상위 순위를 최대값으로 원한다는 의미입니다. 그런 다음 method 인수를 dense로 설정합니다.

Group_Data["Rank_groupby"] = Group_Data.groupby("OrderDateYear")["Profit"].rank(
    ascending=False, method="dense"
)
Group_Data

실행 후 이제 사무용품이 1위를 차지한 다음 다른 그룹 수준이 각 특정 연도에 대해 1, 2, 3에서 다시 시작되었음을 알 수 있습니다.

그룹 기반 Pandas 순위 데이터 - 출력 2

전체 예제 코드:

# In[1]:
import numpy as np
import pandas as pd
import datetime

Store_Data = pd.read_excel("demo_Data.xls")
Store_Data["OrderDateMonth"] = Store_Data["Order Date"].apply(lambda x: x.month)
Store_Data["OrderDateYear"] = Store_Data["Order Date"].apply(lambda x: x.year)

Mon_Year_Sales = pd.pivot_table(
    Store_Data,
    index=["OrderDateMonth"],
    columns=["OrderDateYear"],
    aggfunc="sum",
    values="Sales",
)
Mon_Year_Sales

# In[2]:

Mon_Year_Sales.rank()

# In[3]:

Mon_Year_Sales.rank(ascending=False)

# In[4]:

Store_Data.head(2)

# In[5]:

Group_Data = (
    Store_Data.groupby(["OrderDateYear", "Category"])
    .agg({"Profit": "sum"})
    .reset_index()
)
Group_Data

# In[6]:

Group_Data["Rank_groupby"] = Group_Data.groupby("OrderDateYear")["Profit"].rank(
    ascending=False, method="dense"
)
Group_Data

여기에서 관련 답변을 더 읽어보세요.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Pandas DataFrame