Blair  - Soul Eater [파이썬 개념] Pandas 8- DataFrame으로 합계와 평균 구하기

• programming language/python

[파이썬 개념] Pandas 8- DataFrame으로 합계와 평균 구하기

oujin 2022. 8. 1. 13:31
728x90

DataFrame 클래스의 sum() 메소드 : 

#DataFrame의 sum() 메소드는 열 방향(axis=0) 또는 행 방향(axis=1)으로 배열 요소의 합계를 구해 DataFrame(또는 Series) 객체로 반환

데이터프레임명.sum(axis=0 또는 axis=1)

 

 

import pandas as pd

scores = {'이름': ['김지영', '안지수', '최성수', '황예린', '김소정'],
        '국어' : [95, 97, 90, 94, 87],
        '영어' : [90, 86, 93, 85, 93],
        '수학' : [85, 88, 89, 88, 99]}

frame = pd.DataFrame(scores)
print(frame)

frame2 = frame.iloc[:,[1,2,3]]

#frame 객체에서 모든 행(:)에 대해 열 인덱스 123인 열의 데이터를 frame2에 저장


print(frame2)

total = frame2.sum(axis=1)

frame2의 데이터를 행방향(axis=1)으로 요소 값의 합계를 구한다


print(total)

 

 

    이름  국어  영어  수학
0  김지영  95  90  85
1  안지수  97  86  88
2  최성수  90  93  89
3  황예린  94  85  88
4  김소정  87  93  99
   국어  영어  수학
0  95  90  85
1  97  86  88
2  90  93  89
3  94  85  88
4  87  93  99
0    270
1    271
2    272
3    267
4    279
dtype: int64

 


 DataFrame 클래스의 mean() 메소드 :

#열 방향(axis=0) 또는 행 방향(axis=1)으로 배열 요소의 평균 값을 구해 DataFrame (또는 Series) 객체에 반환

데이터프레임명.mean(axis=0 또는 axis=1)

 

 

import pandas as pd

scores = {'이름': ['김지영', '안지수', '최성수', '황예린', '김소정'],
        '국어' : [95, 97, 90, 94, 87],
        '영어' : [90, 86, 93, 85, 93],
        '수학' : [85, 88, 89, 88, 99]}

frame = pd.DataFrame(scores)

frame2 = frame.iloc[:, [1, 2, 3]]

total = frame2.sum(axis = 1)


avg = frame2.mean(axis = 1)
#frame2에 저장된 요소들을 행방향으로의 평균값을 구해 avg에 저장


print('-' * 50)
print('이름    합계  평균')
print('-' * 50)
for i in range(5) :
    print('%s  %d   %.2f' % (frame.iloc[i,0],total.iloc[i],avg.iloc[i]))
    #각 행마다 5명 학생의 이름, 성적 합계와 평균을 출력
print('-' * 50)    

 

--------------------------------------------------
이름    합계  평균
--------------------------------------------------
김지영  270   90.00
안지수  271   90.33
최성수  272   90.67
황예린  267   89.00
김소정  279   93.00
--------------------------------------------------

 

 

 

 

 

 

 

 

 

 

출처: 예제 중심 파이썬 입문

궁금한 부분이 있으면 댓글 부탁드립니다^^

728x90