반응형

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()를 이용해서 데이터를 다시 컬럼으로 돌려놓는다.

 

반응형

+ Recent posts