๐ฉ Pandas
๐ Groupby
df.groupby("Team")["Points"].mean()
h_index = df.groupby(["Team", "Year")["Points"].sum()
grouped = df.groupby("Team")
for name, group in grouped:
print(name)
print(group)
๐จ Aggregation
- ์์ฝ๋ ํต๊ณ์ ๋ณด๋ฅผ ์ถ์ถ
grouped.agg(max)
- ํด๋น ์ ๋ณด๋ฅผ ๋ณํ (์๋ ์ฝ๋: ๊ทธ๋ฃน๋ณ๋ก ํจ์(lambda) ์ ์ฉ)
- ๊ทธ๋ฃน๋ณ๋ก ์ฐ์ฐ์ ํด์ฃผ๊ณ ๊ฐ๊ฐ์ ๊ฐ์ ์ํฅ์ ์ค ์ ์๊ฒ ํด์ค๋ค.
๐จ Filteration
- ํน์ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ํํฐ๋ง ๊ธฐ๋ฅ
๐ Pivot Table
- ๋ฐ์ดํฐ ๊ฐ๋ค: duration ์นผ๋ผ๊ฐ๋ค
- index ์ค์ : month, item ์นผ๋ผ๋ณ๋ก
- ํ
์ด๋ธ์ ์นผ๋ผ(์์ฑ)๋ค: network ์นผ๋ผ๋ค๋ก
- aggregation function: sum() ํด์ ๊ฐ๋ค ํํ
- NaN์ด ์๋๋ก 0์ผ๋ก ์ฑ์์ฃผ๊ธฐ
df_phone.groupby(['month','item','network'])['duration'].sum().unstack()
ํ๋ฉด ๊ฐ๊ฒ ๋์จ๋ค.
๐ Crosstab
- ๋ ์นผ๋ผ์ ๊ต์ฐจ ๋น๋, ๋น์จ, ๋ง์
๋ฑ์ ๊ตฌํ ๋ ์ฌ์ฉ
- Pivot table์ ํน์ํ ํํ
- user-item Rating matrix ๋ฑ์ ๋ง๋ค ๋ ์ฌ์ฉ
๐ merge & concat
๐จ merge
- 2๊ฐ์ ๋ฐ์ดํฐ(ex. ํ
์ด๋ธ)๋ฅผ ํ๋๋ก ํฉ์น ๋
- ์์ ์ด๋ฏธ์ง์์ subject_id๊ฐ ๊ฒน์น๋ฏ๋ก ๊ฒน์น๋ 4,5,7,8๋ง ํฉ์ณ์ subject_id๋ฅผ ๊ธฐ์ค์ผ๋ก ํ
์ด๋ธ ๋ณํฉ์ด ๊ฐ๋ฅํ๋ค.
pd.merge(df_a, df_b, on='subject_id')
- on์ ์ฐ๋ฉด ์์ชฝ ๋ฐ์ดํฐ์ ๊ฐ์ ๊ธฐ์ค ์นผ๋ผ์ด ์กด์ฌํด์ผํ๋ค.
pd.merge(df_a, df_b, left_on='subject_id', right_on='subject_id')
- ๋ dataframe์ด column๋ช
์ด ๋ค๋ฅผ ๋
๐ join
- inner join: A์ B์ ๊ณตํต๋ ๋ฐ์ดํฐ๋ค๋ง
- full join: ๊ณตํต๋ ๋ฐ์ดํฐ๋ค์ ๋ถ์ด๊ณ ์๋ ๊ฒ๋ค๋ ์ ๋ถ ๋ณด์ฌ์ฃผ๊ธฐ
- left join: ์ผ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ค์ ์ ๋ถ ๋ณด์ฌ์ฃผ๊ณ ๊ฐ์ ์นผ๋ผ๋ช
์ด์ง๋ง ์ค๋ฅธ์ชฝ์์ ์๋ ๋ฐ์ดํฐ๋ค์ NaN์ผ๋ก ํ์ (๊ณตํต๋ ๋ถ๋ถ์ ํฉ์นจ)
- right join: ์ค๋ฅธ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ค์ ์ ๋ถ ๋ณด์ฌ์ฃผ๊ณ ๊ฐ์ ์นผ๋ผ๋ช
์ด์ง๋ง ์ผ์ชฝ์์ ์๋ ๋ฐ์ดํฐ๋ค์ NaN์ผ๋ก ํ์ (๊ณตํต๋ ๋ถ๋ถ์ ํฉ์นจ)
pd.merge(df_a, df_b, on='subject_id', how='left / right / inner / outer')
๐จ index๋ฅผ ๊ธฐ์ค์ผ๋ก joinํ๊ธฐ
pd.merge(df_a, df_b, right_index=True, left_index=True)
๐ concat
- ๋ฐ์ดํฐ ์ด์ด๋ถ์ด๊ธฐ
df_new = pd.concat([df_a, df_b])
df_a.append(df_b)
- axis๋ฅผ 1๋ก ์ง์ ํ๋ฉด ๊ฐ๋ก๋ก ๋ถ์ด๊ณ 0์ผ๋ก ์ง์ ํ๋ฉด ์ธ๋ก๋ก ๋ถ์ธ๋ค.