2016-06-07 2 views
0

두 개의 데이터 프레임이 있고 일부 열 이름은 같고 일부는 다릅니다. 일반적인 열 이름 만 가진 병합 된 데이터 프레임을 만들고 싶습니다. 있는 dataframe을 할 경우 지금팬더 : 두 개의 데이터 프레임을 병합하고 공통 열 이름 만 유지

d1 = {'group' : ('A', 'B', 'C') , 'names' : ('alpha', 'beta', 'gamma') ,'num1': (1,2,3)} 
df1 = pd.DataFrame(d1) 

d2 = {'group' : ('B', 'C', 'D',) , 'names' : ('Beta','Gamma','Delta') ,'num2': (4,5,6)} 
df2=pd.DataFrame(d2) 

를 들어

groupnames하지만 num1num2, 나는이

L1=list(df1.columns) 
L2=list(df2.columns) 
L=list(set(L1).intersection(L2)) 

df=pd.merge(df1,df2, on=L,how='outer') 

cols = [col for col in df.columns if col not in L] 
df=df.drop(cols,axis=1) 
df 

이 나를 위해 완벽하게 잘 작동 할 수 있지만, 나는 확신 그것을하는 더 좋은 방법이 있습니다. 나는 이것을 실현하기 위해 set intersection, mergelist comprehension을 사용하지 않아도된다고 생각합니다.

나는 이것을 달성하기위한보다 우아한 방법에 대한 어떤 생각이라도 고맙게 생각합니다.

답변

3

나는 당신이 concat 대신 merge의를하고 싶은 생각 :

df = pd.concat([df1, df2], join='inner', ignore_index=True) 

결과 출력 :

group names 
0  A alpha 
1  B beta 
2  C gamma 
3  B Beta 
4  C Gamma 
5  D Delta 
+0

이 완벽하고 나는이 놓친 믿을 수 없다. – PagMax

관련 문제