강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

6회 작업형 1-2 교사수 문제

작성

·

142

0

  1. 학교에서 교사 한 명당 맡은 학생 수가 가장 많은 학교를 찾고, 그 학교의 전체 교사 수를 구하시오. (정수 출력)

import pandas as pd

df = pd.read_csv('data6-1-2.csv')

df['전체'] = df.iloc[:, 2:].sum(axis=1)

df['전체/교사'] = df['전체'] / df['교사수']

여기까지는 했는데

 

여기서 학교 한 명당 맡은 학생수 즉, 전체/교사수가 가장 많은 학교를 찾아야하는데

 

학교명을 groupby로 해서 푸는 코드가 어떻게 되나요,,?

 

풀이는 idxmax로 했는데,, groupby로 풀고싶어요!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

그룹별로 최댓값을 찾기 위해 groupby를 사용하는 방법을 안내해드리겠습니다.

처음에는 학교별로 데이터를 그룹화한 뒤 ‘전체/교사’ 칼럼의 최대값을 찾는 방법으로 접근할 수 있습니다. 하지만, 여기서는 이미 각 학교의 데이터가 합산되어 ‘교사수’와 ‘전체/교사’ 값이 주어지므로 groupby는 필요하지 않습니다.

그럼에도 groupby를 사용하고 싶으시다면 ‘학교명’ 칼럼을 기준으로 한 번만 그룹화하고 그룹 내 최댓값을 찾을 수 있겠지만, 이 경우 각 학교마다 하나의 데이터만 존재하기 때문에 별도의 집계 없이 그룹별 최댓값은 각 학교의 해당 값과 동일하게 됩니다.

따라서 가장 많은 ‘전체/교사’ 값을 가진 행을 직접 찾아야 합니다. 그러나 이미 진행하신 idxmax 메소드를 사용하는 것이 적절합니다. 가장 많은 학생을 맡은 교사 비율을 가진 학교와 교사 수를 찾기 위한 예제 코드는 다음과 같습니다.

# '전체/교사' 가장 큰 값을 가진 행의 인덱스를 찾습니다.
max_ratio_index = df['전체/교사'].idxmax()

# idxmax로 찾은 인덱스를 사용하여 학교명을 얻습니다.
school_with_max_ratio = df.loc[max_ratio_index, '학교명']

# 가장 큰 비율을 가진 학교의 교사 수를 찾습니다.
num_teachers = df.loc[max_ratio_index, '교사수']

# 결과 출력
print(f'학생-교사 비율이 가장 큰 학교: {school_with_max_ratio}')
print(f'{school_with_max_ratio}의 교사 수: {num_teachers}')

이 코드는 ‘전체/교사’의 최댓값을 가진 학교의 이름과 해당 학교의 교사 수를 출력합니다. groupby를 사용하여 해결하는 것보다 이미 제공된 데이터와 idxmax를 적절히 활용하는 방법이 코드를 간결하고 효율적으로 만든다는 점을 이해해 주시면 좋겠습니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기