如何合并两个不同的数据帧,在填充空白时保留每个数据帧的所有行?
DF1
Name Addr Num Parent Parent_Addr
Matt 123H 8 James 543F
Adam 213H 9 James 543F
James 321H 10 Mom 654F
Andrew 512F 10 Dad 665F
Faith 555A 7 None 657F
DF2
Name Parent Parent_Num Parent_Addr
Matt James 10 543F
Adam James 10 543F
James Mom 12 654F
None Ian 13 656F
None None None 1234
预期输出
Name Addr Num Parent Parent_Num Parent_Addr
Matt 123H 8 James 10 543F
Adam 213H 9 James 10 543F
James 321H 10 Mom 12 654F
Andrew 512F 10 Dad None 665F
Faith 555A 7 None None 657F
None None None Ian 13 656F
None None None None None 1234
我正在尝试合并并保留两个数据帧的所有数据。任何帮助将不胜感激。谢谢。
答案 0 :(得分:6)
您需要合并所有公共列并使用外部联接
pd.merge(df1, df2, on = ['Name', 'Parent', 'Parent_Addr'], how = 'outer')
Name Addr Num Parent Parent_Addr Parent_Num
0 Matt 123H 8 James 543F 10
1 Adam 213H 9 James 543F 10
2 James 321H 10 Mom 654F 12
3 Andrew 512F 10 Dad 665F NaN
4 Faith 555A 7 None 657F NaN
5 None NaN NaN Ian 656F 13
6 None NaN NaN None 1234 None
答案 1 :(得分:2)
您可以使用'outer'
merge
来保留所有行
note 默认情况下merge
将加入所有常用列名称。
df1.merge(df2, 'outer')
Name Addr Num Parent Parent_Addr Parent_Num
0 Matt 123H 8.0 James 543F 10
1 Adam 213H 9.0 James 543F 10
2 James 321H 10.0 Mom 654F 12
3 Andrew 512F 10.0 Dad 665F NaN
4 Faith 555A 7.0 None 657F NaN
5 None NaN NaN Ian 656F 13
6 None NaN NaN None 1234 None