데이터 피봇팅¶
데이터 중 정보가 스택양식으로 로우에 연속적으로 표현된 경우가 있습니다. axis의 x,y에 대한 index별 status값이 로우에 연속적으로 저장된 행방향 데이터를 열 방향 데이터로 변경하는 것을 피봇(Pivot)이라고 합니다.
import pandas as pd
sensor_readings = pd.DataFrame({"index" : [0,1,2,3,4,0,1,2,3,4], "axis" : ['x', 'x', 'x', 'x', 'x', 'y','y','y','y','y'], "status": [10,11,12,13,14,105,106,107, 108, 109,] })
sensor_readings
index | axis | status | |
---|---|---|---|
0 | 0 | x | 10 |
1 | 1 | x | 11 |
2 | 2 | x | 12 |
3 | 3 | x | 13 |
4 | 4 | x | 14 |
5 | 0 | y | 105 |
6 | 1 | y | 106 |
7 | 2 | y | 107 |
8 | 3 | y | 108 |
9 | 4 | y | 109 |
데이터의 구조를 살펴보면 index가 0에서 4까지 반복되며 axis x, axis y의 값을 status에 저장하고 있습니다. axis의 x와 y값을 컬럼으로 구분하여 표시하는 것이 정보를 쉽게 이해할 수 있을 것 같습니다.
피봇 기능은 스택양식으로 저장된 데이터를 자신이 원하는 방식으로 컬럼 변환이 가능합니다. .pivot()을 이용하여 axis 컬럼을 axis 컬럼의 데이터를 컬럼으로 표시하는 새로운 데이터프레임을 생성합니다.
pivot()을 이용하여 생성한 데이터프레임에는 'axis'컬럼의 x, y가 각각 index 컬럼을 기준으로 새로운 컬럼으로 생성된 것을 확인할 수 있습니다.
sensor_readings.pivot(index = "index", columns="axis", values = "status")
axis | x | y |
---|---|---|
index | ||
0 | 10 | 105 |
1 | 11 | 106 |
2 | 12 | 107 |
3 | 13 | 108 |
4 | 14 | 109 |
위의 예시는 스택양식의 데이터 프레임에 1개의 컬럼만 있는 경우였습니다. 2개 이상의 컬럼과 값이 있는 경우 pivot()에 사용할 컬럼 정보를 리스트로 전달합니다.
2개의 컬럼을 가지는 데이터프레임을 피봇하는 예제를 만들기 위해서 아래와 같이 새로운 데이터 프레임을 생성합니다. 컬럼이 'offset'과 'axis' 2개가 되었으며 값으로 확인할 컬럼도 'status', 'error' 2개가 되었습니다.
sensor_readings = pd.DataFrame({
"index" : [0,1,2,3,4,0,1,2,3,4],
"offset": [-1,1,-1,1,-1,1,1,1,1,1],
"axis" : ['x', 'x', 'x', 'x', 'x', 'y','y','y','y','y'],
"status": [10,11,12,13,14,105,106,107, 108, 109],
"error" : [0,1,0,0,0,1,1,0,1,0]})
sensor_readings
index | offset | axis | status | error | |
---|---|---|---|---|---|
0 | 0 | -1 | x | 10 | 0 |
1 | 1 | 1 | x | 11 | 1 |
2 | 2 | -1 | x | 12 | 0 |
3 | 3 | 1 | x | 13 | 0 |
4 | 4 | -1 | x | 14 | 0 |
5 | 0 | 1 | y | 105 | 1 |
6 | 1 | 1 | y | 106 | 1 |
7 | 2 | 1 | y | 107 | 0 |
8 | 3 | 1 | y | 108 | 1 |
9 | 4 | 1 | y | 109 | 0 |
pivot을 수행하기 위해서 columes와 values 파라메터에 리스트를 전달합니다. 컬럼의 경우 'axis', 'offset'을 사용하고 이때 확인할 값은 'status', 'error'를 확인하려 합니다.
pivot_df = sensor_readings.pivot(index = "index", columns=['axis', 'offset'], values = ["status", "error"])
pivot_df
status | error | |||||
---|---|---|---|---|---|---|
axis | x | y | x | y | ||
offset | -1 | 1 | 1 | -1 | 1 | 1 |
index | ||||||
0 | 10.0 | NaN | 105.0 | 0.0 | NaN | 1.0 |
1 | NaN | 11.0 | 106.0 | NaN | 1.0 | 1.0 |
2 | 12.0 | NaN | 107.0 | 0.0 | NaN | 0.0 |
3 | NaN | 13.0 | 108.0 | NaN | 0.0 | 1.0 |
4 | 14.0 | NaN | 109.0 | 0.0 | NaN | 0.0 |
columes로 전달한 'axis'와 'offset'의 각 값에 해당하는 status와 error가 컬럼방향으로 표시되고 있습니다. 예를 들어 index '0'의 axis가 'x'이고 offset이 '-1'일 때의 status와 error값은 각각 10과 0임을 확인할 수 있습니다.
'Programming' 카테고리의 다른 글
[collab] 코랩 GPU 사용하기 및 성능비교 (4) | 2022.01.17 |
---|---|
[Pandas] 스태킹과 언스테이킹 (0) | 2022.01.17 |
파이썬 코랩 (collab) 만들기 (0) | 2022.01.16 |
[구글스프레드] 드롭다운 메뉴 만들기 (0) | 2022.01.14 |
[Linux] 명령어 정리 (0) | 2022.01.13 |