python pandas: 合并两个数据框但没有合并重复行
python pandas: merge two data frame but didn't merge the repeat rows
我有两个数据框:df1 和 df2。
df1 正在关注:
name exist
a 1
b 1
c 1
d 1
e 1
df2(只有一个column:name)如下:
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
请举手,提前致谢!
如标题所示,您可以使用 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
我有两个数据框:df1 和 df2。
df1 正在关注:
name exist
a 1
b 1
c 1
d 1
e 1
df2(只有一个column:name)如下:
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
请举手,提前致谢!
如标题所示,您可以使用 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