기타/What I Learned

[AI] 그룹으로 묶기

가죽방패 2021. 10. 19. 15:11

※ groupby() 함수

- 해당 함수를 이용하면 키 값을 기준으로 한 그룹으로 묶을 수 있음

 

예시)

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [1, 2, 3, 1, 2, 3],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# groupby 함수를 이용해봅시다.
# key를 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby('key').sum())

# key와 data1을 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby(['key', 'data1']).sum())

출력)

DataFrame:
  key  data1  data2
0   A      1      4
1   B      2      4
2   C      3      6
3   A      1      0
4   B      2      6
5   C      3      1 

     data1  data2
key              
A        2      4
B        4     10
C        6      7
           data2
key data1       
A   1          4
B   2         10
C   3          7

 

두번째 문단의 출력문구는 key 만 그룹으로 묶여 있기 때문에 혼자 높이가 다르고

세번째 문단의 출력문구는 key와 data1 을 그룹으로 묶어두어 data2 의 높이가 다르게 표시가 되는 것이 보인다.

 

또한 key만을 그룹으로 묶은 것으로 인해 중복되는 값을 합쳐버리기 때문에 data1 과 data2 의 값은 더해져 출력이 되고 key와 data1 을 그룹으로 묶었을 때는 data2 만의 값이 더해져 출력이 된다.

 

※ aggregate() 함수

- 해당 함수는 키값을 기준으로 그룹으로 묶은 결과로 통계량을 구할 수 있다.

 

예시)

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [0, 1, 2, 3, 4, 5],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# aggregate를 이용하여 요약 통계량을 산출해봅시다.
# 데이터 프레임을 'key' 칼럼으로 묶고, data1과 data2 각각의 최솟값, 중앙값, 최댓값을 출력하세요.

print(df.groupby('key').aggregate([min, np.median, max]))

# 데이터 프레임을 'key' 칼럼으로 묶고, data1의 최솟값, data2의 합계를 출력하세요.

print(df.groupby('key').aggregate({'data1':min, 'data2':sum}))

 

출력)

DataFrame:
  key  data1  data2
0   A      0      4
1   B      1      4
2   C      2      6
3   A      3      0
4   B      4      6
5   C      5      1 

    data1            data2           
      min median max   min median max
key                                  
A       0    1.5   3     0    2.0   4
B       1    2.5   4     4    5.0   6
C       2    3.5   5     1    3.5   6
     data1  data2
key              
A        0      4
B        1     10
C        2      7

 

예시와 출력문을 비교해보면 알 수 있는 사실은 해당 함수는 그룹으로 묶인 것들을 최소, 중간, 최대 값을 출력시킬 수 있다는 것과 그룹으로 묶인 것들 중 작은 값과 해당되는 그룹의 값을 모두 더한 결과도 출력할 수 있다는 것 이다.