240509 Today I Learn
๋ฐ์ดํฐ ๋ณํฉํ๊ธฐ
๋ฐ์ดํฐ ํ๋ ์ ๋ถ์ด๊ธฐ Concat
๐ก Concat([๋ถ์ผ ๋ฐ์ดํฐ ํ๋ ์], axis = ์ํ(0)/์ข์ฐ(1))
pd.concat([df1, df2], axis = 0, ignore_index = False)
- axis์ ๊ธฐ๋ณธ๊ฐ์ 0(์์๋๋ก ๋ถ์ด๊ธฐ)
- ignore_index์ ๊ธฐ๋ณธ๊ฐ์ False(์๋ ๋ฐ์ดํฐ ํ๋ ์์์์ ์ธ๋ฑ์ค ์ ์ง)
→ `ignore_index = True`๋ `.reset_index(drop=True)`๋ฅผ ํ์ฉํด ์๋ก์ด ์ธ๋ฑ์ค๋ฅผ ๋ถ์ฌํ ์ ์์
- axis = 0 / axis = 1
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5']})
vconcat = pd.concat([df1,df2], axis = 0)
hconcat = pd.concat([df1,df2], axis = 1)
- ignore_index = True/ False
idx = pd.concat([df1,df2], ignore_index = False)
newidx = pd.concat([df1,df2], ignore_index = True)
newidx2 = pd.concat([df1,df2]).reset_index(drop=True)
๋ฐ์ดํฐ ํ๋ ์ ๋ณํฉํ๊ธฐ Merge
๐กMerge(์ผ์ชฝ ๋ฐ์ดํฐ ํ๋ ์, ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ ํ๋ ์, on ='๊ณตํต๋ ์ปฌ๋ผ', how=์กฐ์ธ ๋ฐฉ์)
pd.merge(left_df, right_df, on='key', how='inner)
- ๊ณตํต๋ ์ปฌ๋ผ๊ฐ(SQL์์ join๊ณผ on์ ์ฌ์ฉํ๋ฏ์ด ์ฌ์ฉํ๋ฉด ๋จ)
- how์ ๊ธฐ๋ณธ ๊ฐ์ inner๋ก merge๋ฅผ ํตํ ๊ฒฐํฉ์ inner join์ด ๊ธฐ๋ณธ๊ฐ์ด๋ค.
→ SQL๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก 'left', 'outer' ์ต์ ์ ์ ๋ ฅํด left join , outer join์ด ๊ฐ๋ฅํ๋ค.
left_df = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
right_df = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})
inner_join = pd.merge(left_df, right_df, on='key', how='inner')
outer_join = pd.merge(left_df, right_df, on='key', how='outer')
left_join = pd.merge(left_df, right_df, on='key', how='left')
๋ฐ์ดํฐ ์ง๊ณํ๊ธฐ
Group by ์ ์ง๊ณํจ์
- ์์ 1) ๋ณต์์ ์ด์ ๊ธฐ์ค์ผ๋ก Group by ํจ์ ์ฌ์ฉํ๊ธฐ
→ ์ฑ๋ณ๊ณผ ์์กด์ฌ๋ถ๋ณ ๋์ด์ ํ๊ท ์ ๊ตฌํ๋ผ.
df.groupby(['Sex','Survived'])['Age'].max()
## Sex Survived
## female 0 57.0
## 1 63.0
## male 0 74.0
## 1 80.0
## Name: Age, dtype: float64
- ์์ 2) ๋ณต์์ ์ด์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ง๊ณ ํจ์ ์ ์ฉํ๊ธฐ
→ ์ฑ๋ณ๊ณผ ์์กด์ฌ๋ถ ๋ณ ๋์ด์ ํ๊ท (mean)๊ณผ ์ต๋๊ฐ(max), ์ด์์ ์ต๋๊ฐ์ ๊ตฌํ๋ผ.
df.groupby(['Sex','Survived']).agg({'Age':['mean','max'],'Fare': 'max'})
ํผ๋ฒํ ์ด๋ธ ๋ง๋ค๊ธฐ
๐ก df.pivot_table(index = 'row_column', columns = 'col_columns', values = '๊ฐ')
- index : ํ์ ๋ค์ด๊ฐ ์ปฌ๋ผ
- columns : ์ด์ ๋ค์ด๊ฐ ์ปฌ๋ผ
- values : ๊ฐ์ ๊ณ์ฐํ ์ปฌ๋ผ
- margins : ์ด๊ณ
→ ๊ธฐ๋ณธ๊ฐ `margins = False` - ๊ธฐํ ์ต์
- fill_value : ๊ฒฐ์ธก์น๊ฐ ๋์ค๋ ๊ฒฝ์ฐ ๋์ฒดํ ๊ฐ์ ์ ๋ ฅ
- margins_name : ์ด๊ณ๊ฐ์ด ์ถ๋ ฅ๋ ์ปฌ๋ผ๋ช
shop = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
'cat': ['shoes', 'acc', 'clothes', 'acc', 'shoes'],
'price': [100,20,300,50,80]
})
shop1 = shop.pivot_table(index = 'Date', columns = 'cat', values = 'price', aggfunc = 'sum')
shop2 = shop.pivot_table(index = 'Date', columns = 'cat', values = 'price',\
aggfunc = 'sum', fill_value= 0)
shop3 = shop.pivot_table(index = 'Date', columns = 'cat', values = 'price',\
aggfunc = 'sum', fill_value= 0,\
margins = True, margins_name= 'tot')
๋ฐ์ดํฐ ์ ๋ ฌํ๊ธฐ
๋๋ณด๊ธฐ
newjeans = pd.DataFrame({
'name' : ['Minji','Hanni','Danielle','Haerin', 'Hyein'],
'age' : [20, 19, 19, 17, 16],
'nationality' : ['Korea', 'Australia', 'Australia','Korea','Korea'],
'height': [169,161.7, 165, 165, 170]
})
์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ : sort_values()
๐ก sort_values(๊ธฐ์ค์ปฌ๋ผ, ascending = True)
- ์์ 1) ํค(Height)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
asc_newjeans = newjeans.sort_values('height')
desc_newjeans = newjeans.sort_values('height',ascending = False)
- ์์ 2) ํค(Height)์ ๋์ด(age)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
newjeans.sort_values(['height','age'], ascending = False)
- ์์ 3) ํค(Height)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ, ๊ฐ์ ๊ฐ์ ๋์ด(age)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
newjeans.sort_values(['height','age'], ascending = [False, True])
์ธ๋ฑ์ค ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ : sort_index()
๐ก sort_index(๊ธฐ์ค์ปฌ๋ผ, ascending = True)
newjeans.sort_index(ascending=False)
→ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ