Data 원본 출처
Target Data(CSV): 역대(1976-2008) 하계 올림픽 메달리스트에 대한 정보
- Source: Kaggle
- DownLoad: archive.zip
df_target = pd.read_csv('./datas/Summer-Olympic-medals-1976-to-2008.csv', encoding='latin1')
df_target.head()
encoding='latin1'
df_clean = df_target.dropna()
df_clean.reset_index(inplace=True)
df_clean.drop('index', axis=1, inplace=True)
df_clean['Year'] = df_clean['Year'].astype(int)
import copy
df_copy = copy.deepcopy(df_clean)
df_archery = df_copy
df_archery = df_archery[(df_copy['Year'] == 2008) &
(df_copy['Sport'] == 'Archery') &
(df_copy['Medal'] == 'Gold') &
(df_copy['Country_Code'] == 'KOR')
]
문제 1에서 만든 DataFrame과 Pandas 기능을 활용하여 아래 예시와 같은 형태의 대한민국 역대 메달 획득 내역을 만들어주세요.
조건1: Index는 Year - Medal로 보여주세요(아래 예시 참고)
조건2: Index에서 Year는 내림차순, Medal은 Gold-Silver-Bronze 순으로 보여주세요(아래 예시 참고)
df_kor = df_clean[(df_clean['Country_Code'] == 'KOR')]
medalCol = ['Gold', 'Silver', 'Bronze']
medalYear = [1976, 1984, 1988, 1992, 1996, 2000, 2004, 2008]
count = ((df_kor['Medal'] == 'Gold') & (df_kor['Year'] == 1984)).sum()
df_kor.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
'Event', 'Country_Code', 'Country',
'Event_gender', 'Medal'], inplace=True)
from pandas.api.types import CategoricalDtype
medalCat = CategoricalDtype(categories=medalCol, ordered=True)
df_kor['Medal'] = df_kor['Medal'].astype(medalCat)
df_kor = pd.pivot_table(df_kor,
index = ['Year', 'Medal'],
values = 'City',
aggfunc=len
)
df_kor = pd.DataFrame(df_kor)
df_1996 = df_clean[df_clean['Year'] == 1996]
df_1996_copy = copy.deepcopy(df_1996)
df_1996_copy.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
'Event', 'Country_Code', 'Country',
'Event_gender', 'Medal'], inplace=True)
df_1996_cnt = df_1996_copy.groupby(['Country'])['Medal'].count().reset_index(name='Medal')
df_1996_cnt = df_1996_cnt.sort_values(by='Medal', ascending=False)
df_1996_cnt = df_1996_cnt.head(10)
df_1996.drop_duplicates(subset = ['City','Year', 'Sport', 'Discipline',
'Event', 'Country_Code', 'Country',
'Event_gender', 'Medal'], inplace=True)
df_1996['Medal'] = df_1996['Medal'].astype(medalCat)
df_rank = df_1996.groupby(['Country', 'Medal']).count()
df_rank = df_rank.sort_values(by=['Country', 'Medal']).reset_index()
df_rank = df_rank.pivot(index='Country',
columns='Medal',
values='City')
df_rank = df_rank.reset_index()
df_rank = df_rank.sort_values(by=['Gold', 'Silver', 'Bronze'], ascending=False).head(10)
df_rank = df_rank.rename_axis(index=None, columns=None)