• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

판다스 value_counts()와 sort_values()에 대하여 문의합니다

22.01.07 12:44 작성 조회수 390

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요.
강의 2.2. KRX 전체 종목분석-input
 
에서 실습을 하는데  

df["Industry"].value_counts().head(20)

을 통해서 상위 20개의 Industry의 빈도를 순차적으로 결과를 도출하였고 

value_counts()는 알아서 빈도가 높은 값부터 낮은 값으로 순처적으로 나온다고 하였는데 

그래프를 df["Industry"].value_counts().head(20).plot.barh()

를 통해서 그리니까 빈도수가 반대로 나와서 다시 sort_values()를 

통해서 정렬을 했는데요. 

 

그래프로 하면 왜 value_counts()만으로는 빈도수가 제대로 정렬이 안되고 

 다시 sort_values()를 해줘야 하는걸까요? 

 

그리고df["Market"].value_counts().sort_values().plot.barh()에서는 

빈도수대로 정렬을 했는데 

sns.countplot(data=df, y="Market").sort_values() 는 오류가 나서 

빈도수대로 그래프 정렬은 어떻게 하면 되나요? 

 

 

sort_values()에 대해서 찾아보는데 정해진 기준에 따라 값을 

정렬하는 함수라고 하는데 현재 코딩에서는 어떤 특별한

기준이 설정되거나 주어지지 않은거 같아서요... 

무작정 그냥 외우기에는 조금 부족한 느낌이 들어 문의합니다. 

감사합니다~ 

 

답변 1

답변을 작성해보세요.

1

안녕하세요.

해당 내용은 ETF 시각화에서 자세히 다루는데요.

value_counts().barh() 를 하게 되면 빈도수가 낮은게 가장 아래에 표현이 됩니다.

그래서 sort_values()로 다시 정렬이 필요한데, 가로 막대가 그려지는 그래프는 빈도수가 가장 많은게 가장 하단에 오도록 구현이 되어 있어서 반대로 정렬하고자 하면 다시 sort_values()로 정렬이 필요합니다.

 

그리고 sort_values() 는 판다스의 기능이라 seaborn 에 메서드 체이닝 형태로는 사용할 수가 없습니다.

대신 order 에 정렬할 값을 리스트 형태로 지정하면 해당 값을 기준으로 정렬이 됩니다.

그래서 seaborn 의 countplot 을 사용하기 위해서는 아래와 같이 정렬해줄 값을 순서대로 지정해 주어야 합니다.

sns.countplot(data=df, y="유형", order=df["유형"].value_counts().index)