๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
study๐Ÿ“š/python

[python/ํŒŒ์ด์ฌ] ํ”ผ๋ฒ—ํ…Œ์ด๋ธ”(pivot table)

by ์Šค๋‹ 2022. 7. 30.

ํ”ผ๋ฒ—ํ…Œ์ด๋ธ”

import pandas as pd
import numpy as np

-๋ฌธ์ œ : ๋‹ค์Œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ A ์„œ๋น„์Šค์˜ ์›”๋ณ„ ํƒˆํ‡ด ํšŒ์›์ˆ˜๋ฅผ ๊ฐ€์ž… ์›”๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•ด ๋†“์€ ๊ฒƒ์ด๋‹ค. ์ด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ด์šฉํ•˜์—ฌ ํ”ผ๋ฒ— ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ธฐ.

df = pd.DataFrame({'๊ฐ€์ž…์›”' : [1, 1, 1, 2, 2, 3], 'ํƒˆํ‡ด์›”' : [1, 2, 3, 2, 3, 3], 'ํƒˆํ‡ดํšŒ์›์ˆ˜' : [101, 52, 30, 120, 60, 130]})
df

pivot_table()

  • ํ”ผ๋ฒ—ํ…Œ์ด๋ธ”(pivot_table) ์ƒ์„ฑ ์‹œ ์ง€์ •ํ•  ์ธ์ž๋“ค์˜ ์ข…๋ฅ˜
    • values : ๊ฐ ๊ทธ๋ฃน ๋ณ„๋กœ ์กฐํšŒํ•  ๊ฐ’์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์—ด ์ด๋ฆ„
    • index : ํ…Œ์ด๋ธ”์˜ ํ–‰์œผ๋กœ ๋“ค์–ด๊ฐˆ ๊ธฐ์กด ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์—ด ์ด๋ฆ„
    • columns : ํ…Œ์ด๋ธ”์˜ ์—ด๋กœ ๋“ค์–ด๊ฐˆ ๊ธฐ์กด ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์—ด ์ด๋ฆ„
    • fill_value : ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ์•Š๋Š” ๊ทธ๋ฃน์— ์ฑ„์šธ ๊ฐ’ ์ง€์ •(๊ธฐ๋ณธ ๊ฐ’ : np.NaN)
    • aggfunc : ๊ฐ ๊ทธ๋ฃน ๋ณ„๋กœ ๊ฐ’๋“ค์„ ์กฐํšŒํ•  ํ•จ์ˆ˜
pivot = pd.pivot_table(df, values = 'ํƒˆํ‡ดํšŒ์›์ˆ˜' , index = ['๊ฐ€์ž…์›”'], columns = ['ํƒˆํ‡ด์›”'])
type(pivot)

pandas.core.frame.DataFrame

pivot

pd.pivot_table(df, values = 'ํƒˆํ‡ดํšŒ์›์ˆ˜' , index = ['๊ฐ€์ž…์›”'], columns = ['ํƒˆํ‡ด์›”'], fill_value = 0 )

-๋ฌธ์ œ : ๋‹ค์Œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€ ์–ด๋А ๊ณผ์ผ ๋งค์žฅ์˜ ํŒ๋งค๋‚ด์—ญ์ด๋‹ค. ๊ฐ ์ƒํ’ˆ ํ•ญ๋ชฉ ๋ณ„, ํฌ๊ธฐ ๋ณ„๋กœ ํŒ๋งค ๊ฐœ์ˆ˜์™€ ํŒ๋งค ๊ธˆ์•ก์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ.

import random
random.randint(1,3)

2

a = []
b = []

for i in range(100):
    a.append(random.randint(1,3))
    b.append(random.randint(1,3))
df = pd.DataFrame({'ํ’ˆ๋ชฉ' : a, 'ํฌ๊ธฐ' : b})
df

df['๊ธˆ์•ก'] = df['ํ’ˆ๋ชฉ'] * df['ํฌ๊ธฐ'] * 500
df['์ˆ˜์ˆ˜๋ฃŒ'] = df['๊ธˆ์•ก'] * 0.1
df

fruit_name = {1 : 'ํ† ๋งˆํ† ', 2 : '๋ฐ”๋‚˜๋‚˜', 3 : '์‚ฌ๊ณผ'}
fruit_size = {1 : '์†Œ', 2 : '์ค‘', 3 : '๋Œ€'}

df['ํ’ˆ๋ชฉ'] = df['ํ’ˆ๋ชฉ'].map(fruit_name)
df['ํฌ๊ธฐ'] = df['ํฌ๊ธฐ'].map(fruit_size)
df

pd.pivot_table(df, values = '๊ธˆ์•ก', index = ['ํ’ˆ๋ชฉ'], columns = ['ํฌ๊ธฐ'], aggfunc = ( 'count', 'sum'))

-๋ฌธ์ œ : ๋‹ค์Œ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์€. ์–ด๋А ๊ณผ์ผ ๋งค์žฅ์˜ ํŒ๋งค๋‚ด์—ญ์ด๋‹ค. ๊ฐ ์ƒํ’ˆ ํ•ญ๋ชฉ ๋ณ„, ํฌ๊ธฐ ๋ณ„๋กœ. ํŒ๋งค ๊ฐœ์ˆ˜์™€ ํŒ๋งค ๊ธˆ์•ก / ์ˆ˜์ˆ˜๋ฃŒ์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ.

df

pd.pivot_table(df, index = ['ํ’ˆ๋ชฉ'], columns = ['ํฌ๊ธฐ'], aggfunc = {'๊ธˆ์•ก' : ['count', 'sum'], '์ˆ˜์ˆ˜๋ฃŒ' : 'sum'})

๋Œ“๊ธ€