2017-02-05 1 views
2
import pandas as pd 
olympics = pd.read_csv('olympics.csv') 

    Edition NOC Medal 
0  1896 AUT Silver 
1  1896 FRA Gold 
2  1896 GER Gold 
3  1900 HUN Bronze 
4  1900 GBR Gold 
5  1900 DEN Bronze 
6  1900 USA Gold 
7  1900 FRA Bronze 
8  1900 FRA Silver 
9  1900 USA Gold 
10  1900 FRA Silver 
11  1900 GBR Gold 
12  1900 SUI Silver 
13  1900 ZZX Gold 
14  1904 HUN Gold 
15  1904 USA Bronze 
16  1904 USA Gold 
17  1904 USA Silver 
18  1904 CAN Gold 
19  1904 USA Silver 

차라리 값 =에 메달의 총 수를 갖는 것보다 약간 총액파이썬 판다 피봇

pivot = olympics.pivot_table(index='Edition', columns='NOC', values='Medal', aggfunc='count') 

NOC  AUT CAN DEN FRA GBR GER HUN SUI USA ZZX 
Edition             
1896  1.0 NaN NaN 1.0 NaN 1.0 NaN NaN NaN NaN 
1900  NaN NaN 1.0 3.0 2.0 NaN 1.0 1.0 2.0 1.0 
1904  NaN 1.0 NaN NaN NaN NaN 1.0 NaN 4.0 NaN 

을 갖는 데이터 프레임을 회동 가능, 나는 NaN을 위해 (#Gold, #Silver, #Bronze) 튜플 (트리플)을 가지고 관심이있다.

어떻게 간결하고 우아하게 처리 할 수 ​​있을까?

피벗 값에 대한 튜플 완벽하게 괜찮로

답변

3
  • value_counts
  • 국가, 날짜의 모든 조합에 대한 다중 인덱스를 생성하는 모든 메달을 계산하는, pivot_table 사용할 필요가 없습니다, 메달
  • fill_values=0

counts = df.groupby(['Edition', 'NOC']).Medal.value_counts() 

mux = pd.MultiIndex.from_product(
    [c.values for c in counts.index.levels], names=counts.index.names) 
counts = counts.reindex(mux, fill_value=0).unstack('Medal') 
counts = counts[['Bronze', 'Silver', 'Gold']] 

pd.Series([tuple(l) for l in counts.values.tolist()], counts.index).unstack() 
01 reindex

enter image description here