이전 글에서 이어지는 글입니다.
이번에는 데이터 프레임을 직접 만들어 줄 것이다.
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값은 평균값으로 정의되어 있다.
'데이터 사이언스 메뉴얼 > pandas' 카테고리의 다른 글
파이썬 Pandas groupby 이해하고 활용하기 -4 (0) | 2020.04.08 |
---|---|
파이썬 Pandas groupby 이해하고 활용하기 -2 (0) | 2020.04.06 |
파이썬 Pandas groupby 이해하고 활용하기 -1 (0) | 2020.04.05 |
파이썬 Pandas NaN 데이터 처리하기 (0) | 2020.03.17 |
파이썬 Pandas DataFrame column 추가 / 삭제하기 (0) | 2020.03.16 |
최근댓글