Pandas:合并两个数据帧并仅保留常用列名

时间:2016-06-07 17:20:52

标签: python pandas dataframe merge

我有两个数据框,一些列名相同,一些不同。我想创建一个只有公共列名的合并数据框。

例如

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来实现这一目标。

我很欣赏任何关于更优雅的方法来实现这一目标。

1 个答案:

答案 0 :(得分: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