반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Ethan's Values

Pandas study - pandas 튜토리얼(5) 본문

Python

Pandas study - pandas 튜토리얼(5)

Ethan_hyk 2023. 10. 19. 16:23
반응형

데이터의 재구조화

1. 피봇 테이블

groupby 함수를 사용한 집계는 전체 통계에서 그룹만 나누어 확인하는 것이라면,

Pivot은 원하는 컬럼별 집계만 확인할 수 있다.

In [11]: no2_subset.pivot(columns="location", values="value")
Out[11]: 
location                   BETR801  FR04014  London Westminster
date.utc                                                       
2019-04-09 01:00:00+00:00     22.5     24.4                 NaN
2019-04-09 02:00:00+00:00     53.5     27.4                67.0
2019-04-09 03:00:00+00:00      NaN      NaN                67.0

두 컬럼별로 집계된 평균값 구하기, pivot()함수는 단일 데이터를 집계하는 경우 사용하고, 여러 값을 집계해야 하는 경우에는 pivot_table()함수를 사용한다.

In [14]: air_quality.pivot_table(
   ....:     values="value", index="location", columns="parameter", aggfunc="mean"
   ....: )
   ....: 
Out[14]: 
parameter                 no2       pm25
location                                
BETR801             26.950920  23.169492
FR04014             29.374284        NaN
London Westminster  29.740050  13.443568

Subtotal(소계)를 하기 위해서는 pivot_table 함수의 인자로 margis=True를 해주면 된다.

In [15]: air_quality.pivot_table(
   ....:     values="value",
   ....:     index="location",
   ....:     columns="parameter",
   ....:     aggfunc="mean",
   ....:     margins=True,
   ....: )
   ....: 
Out[15]: 
parameter                 no2       pm25        All
location                                           
BETR801             26.950920  23.169492  24.982353
FR04014             29.374284        NaN  29.374284
London Westminster  29.740050  13.443568  21.491708
All                 29.430316  14.386849  24.222743

2. MELT

melt함수는 ID 변수를 기준으로 원래 데이터셋에 있던 여러 컬럼을 Variable이라는 컬럼에 아래로 길게 쌓아놓고 Variable 컬럼의 ID와 해당하는 데이터를 넣어주는 식으로 재구조화 됨.

멜트 전

In [16]: no2_pivoted = no2.pivot(columns="location", values="value").reset_index()

In [17]: no2_pivoted.head()
Out[17]: 
location                  date.utc  BETR801  FR04014  London Westminster
0        2019-04-09 01:00:00+00:00     22.5     24.4                 NaN
1        2019-04-09 02:00:00+00:00     53.5     27.4                67.0
2        2019-04-09 03:00:00+00:00     54.5     34.2                67.0
3        2019-04-09 04:00:00+00:00     34.5     48.5                41.0
4        2019-04-09 05:00:00+00:00     46.5     59.5                41.0

멜트 후

In [20]: no_2 = no2_pivoted.melt(
   ....:     id_vars="date.utc",
   ....:     value_vars=["BETR801", "FR04014", "London Westminster"],
   ....:     value_name="NO_2",
   ....:     var_name="id_location",
   ....: )
   ....: 

In [21]: no_2.head()
Out[21]: 
                   date.utc id_location  NO_2
0 2019-04-09 01:00:00+00:00     BETR801  22.5
1 2019-04-09 02:00:00+00:00     BETR801  53.5
2 2019-04-09 03:00:00+00:00     BETR801  54.5
3 2019-04-09 04:00:00+00:00     BETR801  34.5
4 2019-04-09 05:00:00+00:00     BETR801  46.5
  • id_vars는 melt될 기준이되는 컬럼
  • value_vars는 melt할 컬럼을 정의(해당 값이 아래로 길게 펼쳐짐)
  • value_name은 컬럼에 해당되는 값의 열 이름
  • var_name은 value_vars의 컬럼 이름
REMEMBER
1. pivot기능은 데이터의 구조를 변환, pivot_table은 집계가능
2. pivot은 데이터 구조를 긴형식에서 넓은 형식으로 <-> melt는 넓은 형식에서 긴형식으로 재구조함

 

Comments