본문 바로가기
프로그램

[파이썬] 문제 : pandas의 학생별 총점,평균,등수 계산

by 오디세이99 2023. 11. 18.
728x90
반응형

import pandas as pd

data = {
    '출석번호': [1, 2, 3],
    '이름': ['조인성', '송혜교', '원빈'],
    '국어': [56, 78, 56],
    '수학': [55, 95, 64],
    '과학': [46, 54, 96],
    '사회': [78, 35, 69]
}

num_students = len(df)             # 학생수

sums = []                          # 종점(합계) 변수
averages = []                      # 평균 변수
ranks = []                         # 등수 변수

# 학생별 과목들의 합계,평균 구하기
for i in range(num_students):
    total = df.iloc[i, 2:6].sum()  # 과목들의 합계
    sums.append(total)    
    average = total / 4            # 평균 계산
    averages.append(average)

# DataFrame에 총점, 평균 값 추가
df['총점'] = sums
df['평균'] = averages

# 등수 계산
sorted_averages = sorted(averages, reverse=True)    # 평균으로 내림차순 정렬
for avg in averages:                                # 내림차순의 평균값 하나씩 꺼냄
    rank = sorted_averages.index(avg) + 1           # 내림차순한 순서의 인덱스값+1 로 등수 정함
    ranks.append(rank)

df['등수'] = ranks

 

pandas의 메서드를 사용해서 하는 경우

data = {
    '출석번호': [1, 2, 3],
    '이름': ['조인성', '송혜교', '원빈'],
    '국어': [56, 78, 56],
    '수학': [55, 95, 64],
    '과학': [46, 54, 96],
    '사회': [78, 35, 69]
}

df = pd.DataFrame(data)

# Calculate the total and average for the subjects
df['총점'] = df[['국어', '수학', '과학', '사회']].sum(axis=1)
df['평균'] = df[['국어', '수학', '과학', '사회']].mean(axis=1)

# Calculate the rank based on the total score
df['등수'] = df['총점'].rank(ascending=False, method='min').astype(int)
728x90
반응형

댓글