(Machine) 12. Pandas # 2

1 분 소요

1. Group by

  • SQL groupby 명령과 같음
  • split -> applly -> combin 과정을 거쳐 연산함
  • 한 개 이상의 컬럼을 그룹할 수 있음
# 기본 data from:
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
         'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
         'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
         'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
         'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}

df = pd.DataFrame(ipl_data)
# ===== 기본 데이터값
#       Team  Rank  Year  Points
# 0   Riders     1  2014     876
# 1   Riders     2  2015     789
# 2   Devils     2  2014     863
# 3   Devils     3  2015     673
# 4    Kings     3  2014     741
# 5    kings     4  2015     812
# 6    Kings     1  2016     756
# 7    Kings     1  2017     788
# 8   Riders     2  2016     694
# 9   Royals     4  2014     701
# 10  Royals     1  2015     804
# 11  Riders     2  2017     690
df.groupby("Team")["Points"].sum()
# === Team기준 points sum 결과
# Team
# Devils    1536
# Kings     2285
# Riders    3049
# Royals    1505
# kings      812

2. Hierarchical index

  • Hierarchical index은 여러개의 인덱스를 가진것을 말한다.
  • Groupby 명령의 결과물도 결국 dataframe
  • 두개의 column으로 groupby를 할 경우, index가 두개 생성
h_index = df.groupby(["Team","Year"])["Points"].sum()
h_index.index
# ====== 멀티 인덱스 값 부여
# MultiIndex([('Devils', 2014),
#             ('Devils', 2015),
#             ( 'Kings', 2014),
#             ( 'Kings', 2016),
#             ( 'Kings', 2017),
#             ('Riders', 2014),
#             ('Riders', 2015),
#             ('Riders', 2016),
#             ('Riders', 2017),
#             ('Royals', 2014),
#             ('Royals', 2015),
#             ( 'kings', 2015)],
#            names=['Team', 'Year'])

h_index.unstack()
# ======= unstack() matrix 형태로 바꿔줌
# Year     2014   2015   2016   2017
# Team                              
# Devils  863.0  673.0    NaN    NaN
# Kings   741.0    NaN  756.0  788.0
# Riders  876.0  789.0  694.0  690.0
# Royals  701.0  804.0    NaN    NaN
# kings     NaN  812.0    NaN    NaN

댓글남기기