2016-06-07 62 views
0

我有兩個數據框和一些列名是相同的,有些是不同的。我想製作一個只有通用列名稱的合併數據框。熊貓:合併兩個數據框並只保留常用列名

例如

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 intersectionmergelist 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