๋ด๊ฐ ๋ฝ์ ์ฌ๋ฌ ๊ฐ์ ์นผ๋ผ์ ํ๊ณผ ์ด๋ก ์ค์ ํด์ ์กฐํํ๊ณ ์ถ์ ๊ฐ์ ์ฐพ์์ ๋ณผ ์ ์๊ฒ ๋ง๋ ๋ค.
- index์ columns๋ ๋ถ๋ฅ์ ๊ธฐ์ค์ด๋ค.
- values๋ ์กฐํํ๊ณ ์ถ์ ๊ฐ๋ค์ด๋ค.
pd.pivot_table(df, index='๋ด๊ฐ ์ํ๋ ์นผ๋ผ', columns='๋ด๊ฐ ์ํ๋ ์นผ๋ผ', values='๋ด๊ฐ ์ํ๋ ์นผ๋ผ')
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒน์น๋ ๊ฐ์ด ์์ผ๋ฉด ํ๊ท ๊ฐ์ ์ถ๋ ฅํ๋ค. ํ์ง๋ง, ์ํ๋ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.
pd.pivot_table(df, index='๋ด๊ฐ ์ํ๋ ์นผ๋ผ', columns='๋ด๊ฐ ์ํ๋ ์นผ๋ผ', values='๋ด๊ฐ ์ํ๋ ์นผ๋ผ', aggfunc=np.sum) # aggfunc์ ์ด์ฉํ์ฌ ํ๊ท ์ ์ถ๋ ฅํ๋ ๋์ ์ ์ดํฉ์ ์ถ๋ ฅํ๋๋ก ํด์ค๋ค.
๊ทธ๋ฃน ๋ณ๋ก ๋๋ ์ ํต๊ณ๊ฐ์ ํ์ธํ ์ ์๋ค.
df.groupby("์ํ๋ ์นผ๋ผ").์์๋ด๊ณ ์ถ์ ํต๊ณ๊ฐ ๋ฉ์๋ ๋ถ์ฌ์ฃผ๊ธฐ ex. df.groupby("์์์ฌ").count() # ํน์ ์ด๋ง ๊บผ๋ด๊ณ ์ถ์ ๊ฒฝ์ฐ df.groupby("์ํ๋ ์นผ๋ผ")["์ํ๋ ์ด"].์์๋ด๊ณ ์ถ์ ํต๊ณ๊ฐ ๋ฉ์๋ ๋ถ์ฌ์ฃผ๊ธฐ
groupbyํ๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ 2๊ฐ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ด์ฉํ๋ค.
์์๋ ๊ต์ฅํ ์ค์ํ๋ค.df.groupby(["์ํ๋ ์นผ๋ผ1", "์ํ๋ ์นผ๋ผ2"]).์์๋ด๊ณ ์ถ์ ํต๊ณ๊ฐ ๋ฉ์๋ ๋ถ์ฌ์ฃผ๊ธฐ # ์์๋ ๊ต์ฅํ ์ค์ํ๋ค
- multi-index ๋ฐ์ดํฐ ํ๋ ์์ pivot table๋ก๋ ๋ณ๊ฒฝํ ์ ์๋ค.
df.groupby(["์ํ๋ ์นผ๋ผ1", "์ํ๋ ์นผ๋ผ2"]).์์๋ด๊ณ ์ถ์ ํต๊ณ๊ฐ ๋ฉ์๋ ๋ถ์ฌ์ฃผ๊ธฐ df.unstack("ํ์ด๋ฒ๋ฆฌ๊ณ ์ถ์ ์นผ๋ผ")
- multi-index ๋ฅผ ๋ชจ๋ ํ์ด๋ฒ๋ฆด ์๋ ์๋ค.
cf. groupby๋ก ์์ฝ๋ ๋ฐ์ดํฐ ํ๋ ์์ ๋ค์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ด์ฉํ๋ฉด ์ ์ฉํ๋ค.df.reset_index()
- pivot_table
- groupby
- multi index
unstack
reset_index()
๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ํ๋ ๊ฒฝ์ฐ์ ๊ต์ฅํ ๋ง์ด ์ด์ฉ๋๊ธฐ ๋๋ฌธ์, ์ ์์๋๊ธฐ~!