DataFrame.merge( )

DataFrame.merge은 두 개의 데이터프레임 내에 동일한 이름의 칼럼을 On으로 선택하여 해당 기준 칼럼 값이 같을 경우에만 인덱스를 남긴다. 해당 키만 같다면 여러 개의 인덱스들 또한 허용된다. 기본 결합 방식은 'Inner'이다.

#df1, df2, df3 데이터 생성
left=pd.DataFrame({'key1':['K0','K1','K2','K3'],
                  'key2':['K0','K1','K2','K3'],
                  'A':['A0','A1','A2','A3'],
                  'B':['B0','B1','B2','B3']})
right=pd.DataFrame({'key1':['K0','K1','K2','K3'],
                  'key2':['K0','K1','K2','K3'],
                  'C':['C4','C5','C6','C7'],
                  'D':['D4','D5','D6','D7']})
                  
result = pd.merge(left, right, on=['key1','key2'])

#df1, df2, df3 데이터 생성, 키 값이 같은 경우 다수의 인덱스 또한 포함시킨다.
left=pd.DataFrame({'key1':['K0','K1','K3'],
                  'key2':['K0','K1','K3'],
                  'A':['A0','A1','A2'],
                  'B':['B0','B1','B2']},
                 index=[1,2,3])
right=pd.DataFrame({'key1':['K0','K1','K2','K3','K3'],
                  'key2':['K0','K1','K2','K3','K3'],
                  'C':['C4','C5','C6','C7','C8'],
                  'D':['D4','D5','D6','D7','D8']})
                  
result = pd.merge(left, right, on=['key1','key2'])

 

Left Join을 하게 되면, 왼쪽 데이터 프레임에서 On에 해당하는 칼럼들의 인덱스들이 모두 남게 되며, Right Join을 하게되면, 오른쪽 데이터 프레임에서 On에 해당하는 칼럼들의 인덱스들이 모두 남게 된다. Outer Join를 하게 되면 양쪽 데이터 프레임에서 On에 해당하는 칼럼들의 인덱스들이 모두 남게 된다. 이때 양쪽에서 없는 칼럼들의 값은 NaN으로 채워지게 된다. outer 조건에서 Indicator=True 옵션을 사용하게되면 어떻게 merge 되었는지를 파악할 수 있게된다.

#df1, df2, df3 데이터 생성
left=pd.DataFrame({'key1':['K0','K1','K3'],
                  'key2':['K0','K1','K3'],
                  'A':['A0','A1','A2'],
                  'B':['B0','B1','B2']},
                 index=[1,2,3])
right=pd.DataFrame({'key1':['K0','K1','K2','K3','K3'],
                  'key2':['K0','K1','K2','K3','K3'],
                  'C':['C4','C5','C6','C7','C8'],
                  'D':['D4','D5','D6','D7','D8']})
                  

result = pd.merge(left, right, on=['key1','key2'], how='left')
print(result)

result = pd.merge(left, right, on=['key1','key2'], how='right')
print(result)

result=pd.merge(left,right,on=['key1','key2'],how='outer',indicator=True)
print(result)

DataFrame_obj.join(DataFrame_obj)

join은 merge와 비슷하다. 하지만 사용할 때 형태가 전에 포스팅했던 concat과 append 중에 append와 비슷한 형태를 가지고 있다. how option의 디폴트 값은 left이다.

left=pd.DataFrame({'key1':[1,2,3,4],
                   'A':['A0','A1','A2','A3'],
                   'B':['B0','B1','B2','B3']})
right=pd.DataFrame({'C':['C1','C2','C5'],
                   'D':['D1','D2','D5']},
                   index = [1,2,5])

result=left.join(right)
result

result=left.join(right,how='right')
result

result=left.join(right,how='inner')
result

result=left.join(right,how='outer')
result

DataFrame.pivot

피벗 테이블은 발생 요인을 파악하기 위한 다양한 분석을 할 때 유용하게 사용된다. 예를 들어, 월별로 생산량, 제품별 생산량, 거래처별 생상량 등의 수치가 필요한데, 피벗 테이블을 이용하면 쉽게 알 수 있다. 피벗은 중심점이라는 뜻을 가지고 있으며, 각 컬럼 내의 인덱스를 기준으로 데이터를 볼 수 있게할 수 있다

df=pd.DataFrame({'index':[1,1,1,2,2,2],
                 'column':['col_1','col_2','col_3','col_1','col_2','col_3'],
                 'value_1':[1,2,3,4,5,6],
                 'value_2':['x','y','z','q','w','t']})
df

df.pivot(index='index',columns='column',values=['value_1','value_2'])
df.pivot(index='index',columns='column')

DataFrame.melt

melt는 하나 이상의 컬럼들이 식별자 변수들로 구성되는 포멧으로 메세지를 만들 때 유용하다. 다른 컬럼들은, value_vars로서 측정된 변수로서 여겨지며 행 축으로 unpivot 된다. 결과로서, 두 개의 비식발자 컬럼인 variable과 value를 남기게 된다.

df=pd.DataFrame({'index':[1,1,1,2,2,2],
                 'column':['col_1','col_2','col_3','col_1','col_2','col_3'],
                 'value_1':[1,2,3,4,5,6],
                 'value_2':['x','y','z','q','w','t']})
df

df.melt(id_vars=['index','column'])
df.melt(id_vars=['index','column'],
        value_vars=['value_2'])

df.melt(id_vars=['index','column'], value_vars=['value_2'])

DataFrame.stack( ), unstack( ) → pandas.core.series.Series

stack은 데이터프레임의 인덱스에 있는 컬럼 값을 { 인덱스 : {컬럼명 : 컬럼값}} 형태로 변환해준다. unstack은 기존의 stack의 결과물을 다시 DataFrame 형태로 전환함으로써 각 칼럼별이 열로 위치한 인덱스 형태를 띄게 된다.

df=pd.DataFrame({'index':[1,2,3],
                 'alpha':['A','B','C'],
                 'values':[11,22,33],
                 'xyz':['x','y','z']})
df                

df_stack=df.stack()
print('stack 데이터 크기: ',df_stack.shape)
df_stack

df_unstack=df_stack.unstack()
df_unstack

df_stack

 

pandas.Crosstab

crosstab은 각 칼럼 간의 상관관계를 쉽게 확인할 수 있습니다. crosstab을 통해 채워지는 값들은 각 컬럼들이 교차하는 빈도에 대해 나타내줍니다. 크로스 탭은 상관관계.!

df=pd.DataFrame({'factor1':['A','A','A','A', 'A','B','B','B','B'],
                 'factor2':['a','b','c','a','b','a','b','c','c'],
                 'value':[11,13,12,12,14,12,13,11,12]})
df

pd.crosstab(df.factor1, df.factor2)

pd.crosstab(df.factor1, [df.factor2, df.value])

pd.crosstab(df.factor1, df.factor2,
            rownames=['Fact1'],colnames=['Fact2'],
            margins=True)

pd.crosstab(df.factor1, df.factor2, margins=True,
             normalize=True)

df

pd.crosstab(df.factor1, df.factor2)
pd.crosstab(df.factor1, [df.factor2, df.value])pd.crosstab([df.factor1, df.value], [df.factor2, df.value])

 

 

728x90
반응형

'Developer's Life > BigData' 카테고리의 다른 글

BigData 데이터 수집  (0) 2023.05.02
BigData 예측 모델  (0) 2023.05.01
BigData 데이터 정렬 및 중복성 확인  (0) 2023.05.01
BigData 데이터 결합  (2) 2023.04.29
BigData 데이터 내용 확인  (0) 2023.04.28

+ Recent posts