8.2.2 색인 병합하기
left_index= True혹은 right_index= True 옵션을 지정해서 해당 색인을 병합키로 사용할 수 있다.
import pandas as pd
left1= pd.DataFrame({'key':['a','b','a','a','b','c']})
right1 = pd.DataFrame({'group_val':[3.5, 7]}, index = ['a','b'])
print(left1)
print(right1)
pd.merge(left1, right1, left_on='key', right_index= True)
pd.merge(left1, right1, left_on='key', right_index= True , how='outer')
계층 색인된 데이터는 암묵적으로 여러 키를 병합하는 것이라 약간 복잡하다.
import numpy as np
lefth = pd.DataFrame({'key1':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'key2':[2000,2001, 2002, 2001, 2002],
'data':np.arange(5.)})
righth = pd.DataFrame(np.arange(12).reshape((6,2)),index=[['Nevada','Nevada','Ohio','Ohio','Ohio','Ohio'],[2001,2000,2000,2000,2001,2002]],columns = ['event1','event2'])
print(lefth)
print(righth)
pd.merge(lefth, righth, left_on=['key1','key2'], right_index= True)
색인 값을 다룰 때는 how='outer'옵션
여러개 사용할 경우
how='outer', left_index= True, right_index = True
색인으로 병합할 떄 DataFrame의 join메서드를 사용하면 편리하다.
join 메서드는 컬럼이 겹치지 않으며 같거나 유사한 색인 구졸르 가진 여러 개의 DataFrame 객체를 병합할 때 사용할 수 있다.
left2.join(right2, how='outer')
left1.join(right1, on='key')
left2.join([right2, another])
8.2.3 축 따라 이어붙이기
데이터를 합치는 또 다른 방법으로 이어붙이기(연결, 적층 이라고도 한다.)
데이터 연결 binding 적층 stacking
Numpy 는 ndarray를 이어 붙이는 concatenate 함수를 제공한다.
arr = np.arange(12).reshape((3,4))
print(arr)
np.concatenate([arr,arr], axis = 1)
Series나 DataFrame같은 pandas객체의 컨텍스트 내부에는 축마다 이름이 있어서 배열을 쉽게 이어붙일 수 있도록 되어 있다.
pandas의 concat함수
s1 = pd.Series([0,1], index=['a','b'])
s2 = pd.Series([2,3,4], index=['c','d','e'])
s3 = pd.Series([5,6], index=['f','g'])
pd.concat([s1,s2,s3], axis=1)
s4 = pd.concat([s1, s3])
pd.concat([s1,s4], axis = 1)
pd.concat([s1, s4], axis = 1, join ='inner')
ignore_index = True 필옇ㄴ 데이터를 포함하고 있지 않은 경우
8.3 재형성과 피벗
표 형식의 데이터를 재배치 하는 다양한 기본 연산이 존재한다.
8.3.1 계층적 색인으로 재형성하기
stack 과 unstack
stack: 데이터의 컬럼을 로우로 피벗(또는 회전)시킨다.
unstack : 로우를 컬럼으로 피벗시킨다.
stack메서드를 시용하면 컬럼이 로우로 피벗된다.
unstack메서드를 사용하면 위 계층적 색인을 가진 Series로부터 다시 DataFrame을 얻을 수 있다.
unstack레벨 숫자나 컬럼을 사용해서 할 수 도 있다.
.stack(dropna= False)
8.3.2 긴 형식에서 넓은 형식으로 피벗하기
시계열 데이터
pivot('','')
8.3.3 넓은 형식에서 긴 형식으로 피벗하기
pivot과 반대되는 연산은 pandas.melt다 .
하나의 컬럼을 여러 개의 새로운 DataFrame으로 생성하기보다는 여러 컬럼을 하나로 병합하고 DataFrame을 입력보다 긴 형태로 만들어낸다.
pd.melt(Dataframe,['key'])
reset_index()를 이용해서 데이터를 다시 컬럼으로 돌려놓는다.
'책 > python for Data Analysis' 카테고리의 다른 글
09-2. 그래프와 시각화 10-1. 데이터 집계와 그룹 연산 (0) | 2021.02.17 |
---|---|
09-1. 그래프와 시각화 (0) | 2021.02.17 |
07-2. 데이터 정제 및 준비 08-1. 데이터 준비하기: 조인 병합 변형 (0) | 2021.02.07 |
07-1. 데이터 정제 및 준비 (0) | 2021.02.07 |
06-3. 데이터 로딩과 저장 파일 형식 07-1. 데이터 정제 및 준비 (0) | 2021.02.07 |