이전 글에서 이어지는 글입니다.

 

(JY) 파이썬 Pandas groupby 이해하고 활용하기 -2

이전 글에서 이어지는 글입니다. (JY) 파이썬 Pandas groupby 이해하고 활용하기 -1 import pandas as pd train_data = pd.read_csv('./train.csv') train_data.head() Groupby 이해하기 모든 groupby 연산은 기존..

dsbook.tistory.com

이번에는 데이터 프레임을 직접 만들어 줄 것이다.

df = pd.DataFrame({
'사람': ['A', 'A', 'A', 'B', 'B', 'C', 'A', 'A', 'C', 'B', 'B', 'B'],
'요일': ['월요일', '화요일', '수요일', '월요일', '화요일', '월요일', '목요일', '금요일', '화요일', '수요일', '목요일', '금요일'],
'운동종류': ['등산', '헬스', '러닝', '풋살', '풋살', '등산', '헬스', '러닝', '풋살', '농구', '농구', '테니스'],
'운동시간': [80, 70, 90, 60, 40, 30, 50, 90, 30, 80, 50, 10] })


2. 데이터 연산하기

3) DataFrame의 모양 바꾸기: pivot(), pivot_table()

pivot(), pivot_table()은 여러가지 분류로 섞인 DataFrame을 내가 원하는 index와 column으로 정리해 줄 수 있다. 위의 데이터에서 어떤 사람이 무슨 요일에 어떤 운동을 얼마만큼 하는지 조사하여 DataFrame 형태로 만들었지만, 충분히 정리가 되지 않아 한 눈에 알아보기가 어렵다. 그래서 사람과 요일을 기준으로 데이터를 정리해보기로 했다.

df.pivot(index='사람', columns='요일')

df.pivot(index='요일', columns='사람')

 

pivot()에는 index, columns, values로 총 3가지 속성이 있다.

  • index : 새로운 DataFrame의 index를 지정해주는 속성으로, 선택적이며 None으로 지정해주어도 된다. 
  • columns : 새로운 DataFrame의 columns을 지정해주는 속성으로, 반드시 지정해주어야 한다.
  • values : 새로운 DataFrame 값을 채우는데 사용할 column을 지정해주는 속성이다. 지정해주지 않으면 index와 columns을 지정하고 남은 column들로 채운다.

index와 columns은 단일 객체 속성으로 [ ] 형식의 다중 속성 값이 들어갈 수 없다. values에는 다양한 칼럼 값을 채울 수 있다. 위의 예제에서 보듯이 index와 columns에 들어가는 column의 속성만 바뀌어도 그 결과값은 크게 달라진다. 채워지지 않는 곳은 NaN 값으로 대신 채워진다.

df.pivot(index='요일', columns='사람', values='운동시간')

 

여기서 중요한 것은 (index, column)의 값이 중복값이 생겨서는 안된다는 것이다. A라는 사람이 금요일에 러닝도 했고, 등산도 했다면 (A, '금요일') 범주에 데이터가 2개가 생겨버리므로 오류가 발생한다. 이때 사용하는 함수가 pivot_table() 이다.

df = pd.DataFrame({
'사람': ['A', 'A', 'A', 'B', 'B', 'C', 'A', 'A', 'C', 'B', 'B', 'B'],
'요일': ['월요일', '금요일', '수요일', '월요일', '화요일', '월요일', '목요일', '금요일', '화요일', '수요일', '목요일', '금요일'],
'운동종류': ['등산', '헬스', '러닝', '풋살', '풋살', '등산', '헬스', '러닝', '풋살', '농구', '농구', '테니스'],
'운동시간': [80, 70, 90, 60, 40, 30, 50, 90, 30, 80, 50, 10] })
# ['A', '금요일', '헬스', 70] ['A', '금요일', '러닝', '90']
df.pivot_table(index='요일', columns='사람', values = '운동시간')

기능적으로 pivot값과 동일하나, pivot_table은 중복되는 모호한 값이 있을 경우, aggfunc 속성을 통해 연산함수를 설정하여 하나로 정리할 수 있다. aggfunc의 default값은 평균값으로 정의되어 있다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기