ํผ๋ฒํ ์ด๋ธ์ด๋?
ํผ๋ฒ(Pivot) ํ
์ด๋ธ์ด๋ ์๋ง์ ์์ ๋ฐ์ดํฐ ์์์ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฝ์ ์ ์๋ฏธํ ํ๋ฅผ ์์ฑํ๋ ๊ธฐ์ ์ด๋ค.
์์
์์ ์ด ๊ธฐ๋ฅ์ด ์์ฃผ ์ฌ์ฉ๋๋ฉฐ Pandas๋ฅผ ์ด์ฉํด์ฌ์ฉ์ ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ํธ๋ค๋ง ํ ์ ์๋ค.
data.pivot() | python์ ์ด์ฉํ ํผ๋ฒํ ์ด๋ธ ์์ฑ
# ์์ ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ์ดํฐ ๋ก๋
import numpy as np
import pandas as pd
import seaborn as sns
tips = sns.load_dataset('tips')
titanic = sns.load_dataset('titanic')
iris = sns.load_dataset('iris')
์์ ๋ฅผ ์ํด seaborn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ tips ํ, iris ๊ฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ค.
tips ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
pandas๋ฅผ ์ด์ฉํด ํผ๋ฒ ํ
์ด๋ธ์ ์์ฑํ๋ pivot()
ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.tips.pivot(index=[ํ ์ธ๋ฑ์ค], columns=[์ด ์ธ๋ฑ์ค], values=[๋ถ์ํ๊ณ ์ ํ๋ KEY FIGURE(๋ณ์)])
์์ผ๊ณผ ์ฑ๋ณ์ ๋ฐ๋ฅธ tip์ ํ๊ท ์ ๊ตฌํ๊ธฐ ์ํด groupby() ํจ์๋ฅผ ํตํด ํต๊ณ๋(ํ๊ท )์ ๊ตฌํด์ผํ๋ค.
# tips ๋ฐ์ดํฐ๋ฅผ ํผ๋ฒํ
์ด๋ธ๋ก ์์ฑ
grp_s_d = tips.groupby(['sex', 'day'])[['tip']].mean() # ์ฑ๋ณ๊ณผ ์์ผ์ ๋ฐ๋ฅธ tip์ ํ๊ท ์ผ๋ก ํต๊ณ๋์ ๊ณ์ฐ
grp_s_d.reset_index(inplace=True)
grp_s_d
grp_s_d.pivot(index='sex', columns='day', values='tip')
์ด์ฒ๋ผ pandas๋ฅผ ์ด์ฉํด ํผ๋ฒ ํ ์ด๋ธ์ ์์ฑํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ groupby() ๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ pivot() ํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
pd.pivot_table() | ํผ๋ฒ ํ ์ด๋ธ์ ๋ณด๋ค ๊ฐํธํ๊ฒ ๊ตฌํด๋ณด์
ํผ๋ฒํ
์ด๋ธ์ ๊ตฌํ๊ธฐ ์ํด ๋งค๋ฒ ๊ทธ๋ฃนํ์ ์ง์ ํ๋ ๊ฒ์ ๊ต์ฅํ ๊ท์ฐฎ์ ์์
์ด ๋ ์ ์๋ค.
Pandas์์๋ aggfunc
๋ผ๋ ์ต์
์ ํตํด groupby() ๋ฉ์๋ ์์ด ํต๊ณ๋์ ๋ฐ๋ก ๊ณ์ฐํ์ฌ ํผ๋ฒ ํ
์ด๋ธ์ ์์ฑํ ์ ์๋๋ก ์ง์ํ๋ค.
์์์ ๊ตฌํ ํผ๋ฒํ
์ด๋ธ๊ณผ ๋์ผํ ํผ๋ฒํ
์ด๋ธ์ aggfunc
์ต์
์ ์ด์ฉํด ์์ฑํด๋ณด์.
pd.pivot_table(data=tips, index='sex', columns='day', values='tip', aggfunc='mean')
unstack()
unstack()
๋ฉ์๋์ ๋ณธ๋ ์ฉ๋๋ ์ค์ฒฉ๋ Index๋ฅผ ์ผ์ ์์ค์ ๋ ๋ฒจ์ ๋ฐ๋ผ ์ค์ฒฉ์ ๋ฒ๊ฒจ๋ด๊ธฐ ์ํจ์ด๋ค.
ํ์ง๋ง ์ด unstack()
ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ทธ๋ฃนํ ๋ Dataframe์ ํผ๋ฒ ํ
์ด๋ธ๋ก ๋ณํํ ์ ์๋ค.
for_pv = tips.groupby(['sex', 'day'])[['tip']].mean()
for_pv
์ด์ฒ๋ผ ์ฑ๋ณ, ์ผ์๋ก ์ค์ฒฉ๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ Dataframe์ unstack()
ํจ์๋ฅผ ์ฌ์ฉํด๋ณด์.
for_pv.unstack(level=1)
unstack()
ํจ์๋ฅผ ์ฌ์ฉํ์ ์์ ์์ฑํ ํผ๋ฒ ํ
์ด๋ธ๊ณผ ๋์ผํ ๋ชจ์ต์ ํผ๋ฒ ํ
์ด๋ธ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Dataframe ๋ณํฉ (1) | 2024.10.17 |
---|---|
[Python] pd.cut ๊ณผ pd.qcut ๋น๊ต (0) | 2024.10.17 |
[Python] Boolean Indexing (0) | 2024.10.16 |
[Python] lambda (2) | 2024.10.16 |
[Python] map, apply, applymap (0) | 2024.10.16 |