본문 바로가기

Python

[Python] 판다스(pandas)_7.concatenate - 데이터프레임 병합, groupby - 데이터 그룹바이

#정리

#10concatenate - 데이터프레임 병합

#(넘파이)np.concatenate([df1,df2])

 - print(np.concatenate([df1,df2]))
 - print(np.concatenate([df2,df3],axis=1))

#(판다스)pd.merge(df1,df2)
 ** inner join 형태는 공통 컬럼(key)가 있을 때, 병합 가능
 - print(pd.merge(df1,df2,on='key',how='inner')) #양측 다 있는 key(a,b)로만 조인
 - print(pd.merge(df1,df2,on='key',how='outer')) #full outer
 - print(pd.merge(df1,df2,on='key',how='left')) #left outer (좌측 기준, 우측 nan발생)
 - print(pd.merge(df1,df2,on='key',how='right')) #right outer (우측 기준, 좌측 nan발생)


#11groupby - 데이터 그룹바이

#groupby( )."옵션" : groupby는 목적에 맞게 합계,평균,카운트,최대/최소 등의 옵션을 붙인다. 

 - print(df_emp.groupby(df_emp['dept_id'])) #그룹바이 오브젝트 메모리 주소로 반환
 - print(df_emp[['dept_id','salary']].groupby('dept_id').sum()) #각 부서별 연봉 합계 반환
 - print(df_emp[['dept_id','salary']].groupby('dept_id').mean()) #각 부서별 연봉 평균 반환

 

 

 

 

#10concatenate - 데이터프레임 병합

#(넘파이)np.concatenate([df1,df2])

 - print(np.concatenate([df1,df2]))
 - print(np.concatenate([df2,df3],axis=1))

#(판다스)pd.merge(df1,df2)
 ** inner join 형태는 공통 컬럼(key)가 있을 때, 병합 가능
 - print(pd.merge(df1,df2,on='key',how='inner')) #양측 다 있는 key(a,b)로만 조인
 - print(pd.merge(df1,df2,on='key',how='outer')) #full outer
 - print(pd.merge(df1,df2,on='key',how='left')) #left outer (좌측 기준, 우측 nan발생)
 - print(pd.merge(df1,df2,on='key',how='right')) #right outer (우측 기준, 좌측 nan발생)

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

print("---------------")
dict = {'data1':range(100,107),
		'key':['b','b','a','c','a','a','b']}
df1 = pd.DataFrame(dict)
print(df1)

print("---------------")
dict = {'data2':range(100,103),
		'key':['a','b','d']}
dict = {'key':['a','b','d']
		,'data2':range(100,103)}
df2 = pd.DataFrame(dict)
print(df2)

print("---------------")
dict = {'data3':range(10,13),
		'key3':['x','y','z']}
df3 = pd.DataFrame(dict)
print(df3)


print("---(넘파이)np.concatenate([df1,df2])----")
print(np.concatenate([df1,df2]))
print(np.concatenate([df2,df3]))
#print(np.concatenate([df1,df2],axis=1)) #error - 행 갯수가 달라서 에러남
print(np.concatenate([df2,df3],axis=1))

print("---(판다스)pd.merge(df1,df2)----")
#공통 컬럼(key)가 있을 때, 병합 가능 (inner join 형태)
print(pd.merge(df1,df2,on='key',how='inner')) #양측 다 있는 key(a,b)로만 조인
print(pd.merge(df1,df2,on='key',how='outer')) #full outer
print(pd.merge(df1,df2,on='key',how='left')) #left outer (좌측 기준, 우측 nan발생)
print(pd.merge(df1,df2,on='key',how='right')) #right outer (우측 기준, 좌측 nan발생)


print("---(판다스)pd.merge(df1,df2) 응용 mission ----")
emp = {
	'emp_id':[100,101,200,201,300,400],
	'name':('kim','lee','choi','han','gang','yoon'),
	'salary':[8000000,7000000,7500000,5000000,4000000,6000000],
	'dept_id':[1,1,2,2,3,4],
	'location':['seoul','seoul','busan','busan','daegu','incheon']
}
df_emp = pd.DataFrame(emp)
print(df_emp)

print("--------")
dept = {
	'dept_id':[1,2,3,4,5,6],
	'dept_name':['web','game','temp1','temp2','temp3','temp4']
}

df_dept = pd.DataFrame(dept)
print(df_dept)

print("--------")
#df_emp + 부서명이 나오도록.
merge_df = pd.merge(df_emp,df_dept,on='dept_id',how='left')
print(merge_df)
print(pd.DataFrame(merge_df, columns = ['emp_id','name','salary','dept_id','dept_name','location']))
print(pd.DataFrame(merge_df, columns = ['dept_id','dept_name','name','location']))


print("--------")

 

 

 


#11groupby - 데이터 그룹바이

#groupby( )."옵션" : groupby는 목적에 맞게 합계,평균,카운트,최대/최소 등의 옵션을 붙인다. 

 - print(df_emp.groupby(df_emp['dept_id'])) #그룹바이 오브젝트 메모리 주소로 반환
 - print(df_emp[['dept_id','salary']].groupby('dept_id').sum()) #각 부서별 연봉 합계 반환
 - print(df_emp[['dept_id','salary']].groupby('dept_id').mean()) #각 부서별 연봉 평균 반환

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

print("---------------")
emp = {
	'emp_id':[100,101,200,201,300,400],
	'name':('kim','lee','choi','han','gang','yoon'),
	'salary':[8000000,7000000,7500000,5000000,4000000,6000000],
	'dept_id':[1,1,2,2,3,4],
	'location':['seoul','seoul','busan','busan','daegu','incheon']
}

df_emp = pd.DataFrame(emp)
print(df_emp)
print("---------------")
print(df_emp.groupby(df_emp['dept_id']))


print("---------------")
#groupby 목적... 합계,평균,최소,최대,카운팅
print(df_emp[['dept_id','salary']])
print(df_emp[['dept_id','salary']].groupby('dept_id').sum())
print(df_emp[['dept_id','salary']].groupby('dept_id').mean())