판다스 각각의 로우(row) 백분율 구하는 방법(The method Compute row percentages in pandas DataFrame)

3590 단어 판다스판다스

판다스로 작업을 하다보면 각각의 데이터(행, row) 마다 백분율을 구하게 되는 경우가 있다. 이해를 돕기 위해 아래의 예시를 먼저 보자.

"서울시의 시군구와 연령별 인구 수" 에 대한 테이블이 있다.

이때 우리는 해당 데이터를 봤을때 어떤 시군구에 어떤 연령층이 많은지 알고싶어도 위와같이 "인구 수"를 나열한 것으로 정보를 가독하기 힘들다.

이때는 각 시군구(행, row, 데이터) 별로 백분율로 표현하게 되면 좀 더 정보를 받아들이기 쉬울것이다. 물론
좀 더 쉬운 방법이 있지만 메서드 사용을 위해서 이 방법을 사용해 보려고 한다.

먼저 결과를 아래에서 먼저 확인해 보자

위에 있는것은 소숫점 3째자리로 줄인 코드까지 포함한 것이다. 이전보다 훨씬 정보를 받아들이기 쉽다.
예를 들어 나는 회사가 신논현에 있다고 가정할때 그럼 서초구의 인구 연령대가 어떻게 될까?? 했을때 서초구를
찾아보면 35~49세 50~65세가 20%이상씩의 비율로 높은것을 알 수 있다. 즉, 아 여기는 학군이 분포하지 않아서 이럴 수 있겠네 라며 추가적인 인사이트 또한 가져갈 수 있다.

이렇게 활용이 가능한 메서드는 아래와 같다.

DataFrame.div()

먼저 간단한 코드로 확인을 해보자

위와 같은 데이터 프레임에서 행별로 백분율을 알고싶으면 다음과 같이 입력하면 된다.

df.div(df[['5세','10세','15세','20세']].sum(axis = 1),axis = 0)

복잡해 보일 수 있지만 복잡할 걱정 전혀 할 필요없다.

df.div() 안을 확인해 보자

df[['5세','10세','15세','20세']].sum()

먼저 위 처럼 나누어서 살펴보자 df에서 우리는 전체 나이의 백분율을 알고싶으므로 "df[['5세','10세','15세','20세']]" 를 사용하였고, 백분율은 우리가 전체를 더해서 해당하는 숫자를 나누는것으로 이미 다들 알고 있을것이다.

데이터 프레임 첫번째 행의 전체 를 더하면 20+30+40+50 =140이다.

다음으로 sum() 안에 axis = 1이 있는데 이것은 axis가 0이면 열, axis 가 1이면 행을 나타낸다. 즉 행을 더한다는 뜻으로 위에서 계산한 20+30+40+50 =140 이러한 계산이고 만약 여기에 axis를 0을 넣는다면 위아래로 더할것이다. 즉 20+30 = 50이 된다. 이는 우리가 원하는것이 아니라는것을 알것이다.

그다음 , 뒤에 axis = 0이 있다. 우리가 앞에서 axis1을 통해 전체 row를 더했으면 이제 각각의 열에 나누어 줘야하기 때문에 axis = 0 이 들어간 것이다.

만약에 아래와 같이 코드를 넣으면 어떻게 될까??

df.div(10)

결과는 아래와 같이 나온다.

div메서드는 기본적으로 나눈다는 뜻이므로 10을 넣어주면 모든값을 10으로 나눈다는 뜻이다.

좋은 웹페이지 즐겨찾기