작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
142
0
학교에서 교사 한 명당 맡은 학생 수가 가장 많은 학교를 찾고, 그 학교의 전체 교사 수를 구하시오. (정수 출력)
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
를 적절히 활용하는 방법이 코드를 간결하고 효율적으로 만든다는 점을 이해해 주시면 좋겠습니다.