我有两个数据框,一些列名相同,一些不同。我想创建一个只有公共列名的合并数据框。
例如
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)
现在要创建一个只有group
和names
但不是num1
和num2
的数据框,我这样做
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
,merge
和list comprehension
来实现这一目标。
我很欣赏任何关于更优雅的方法来实现这一目标。
答案 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