我有两个数据帧:df1和df2。
df1如下:
name exist
a 1
b 1
c 1
d 1
e 1
df2(只有一列:名称)如下:
name
e
f
g
a
h
我想合并这两个数据帧,并没有合并重复名称,我的意思是,如果df2中的名称存在于df1中,只显示一次,否则如果名称df2不存在于df1中,则设置存在的值是0或Nan。例如df1(有a和e),和df2(有a和e,只显示a,e一次),我想成为以下df:
a 1
b 1
c 1
d 1
e 1
f 0
g 0
h 0
我使用concat函数来完成它,我的代码如下:
import pandas as pd
df1 = pd.DataFrame({'name': ['a', 'b', 'c', 'd', 'e'],
'exist': ['1', '1', '1', '1', '1']})
df2 = pd.DataFrame({'name': ['e', 'f', 'g', 'h', 'a']})
df = pd.concat([df1, df2])
print(df)
但结果是错误的(名称a和e重复显示):
exist name
0 1 a
1 1 b
2 1 c
3 1 d
4 1 e
0 NaN e
1 NaN f
2 NaN g
3 NaN h
4 NaN a
请提前致谢!
答案 0 :(得分:1)
如标题所示,您可以使用merge
代替concat
,并将how
参数指定为outer
,因为您要保留df1
的所有记录}和df2
定义外连接:
import pandas as pd
pd.merge(df1, df2, on = 'name', how = 'outer').fillna(0)
# exist name
# 0 1 a
# 1 1 b
# 2 1 c
# 3 1 d
# 4 1 e
# 5 0 f
# 6 0 g
# 7 0 h