关注这篇文章: Merging two columns which don't overlap and create new columns
import pandas as pd
df1 = pd.DataFrame([["2014", "q2", 2],
["2013", "q1", 1],],
columns=('Year', 'Quarter', 'Value'))
df2 = pd.DataFrame([["2016", "q1", 3],
["2015", "q1", 3]],
columns=('Year', 'Quarter', 'Value'))
print(df1.merge(df2, on='Year', how='outer'))
结果:
Year Quarter_x Value_x Quarter_y Value_y
0 2014 q2 2 NaN NaN
1 2013 q1 1 NaN NaN
2 2016 NaN NaN q1 3
3 2015 NaN NaN q1 3
但我希望得到这个:
Year Quarter Value
0 2014 q2 2
1 2013 q1 1
2 2016 q1 3
3 2015 q1 3
注意:这不会产生所需的结果...... :(
print(df1.merge(df2, on=['Year', 'Quarter','Value'], how='outer').dropna())
Year Quarter Value
0 2014 q2 2
1 2013 q1 1
...使用“左”或右'或内部也不会削减它。
答案 0 :(得分:2)
不确定这里发生了什么,但如果我这样做
df1.merge(df2, on=['Year', 'Quarter', 'Value'], how='outer').dropna()
我明白了:
Year Quarter Value
0 2014 q2 2.0
1 2013 q1 1.0
2 2016 q1 3.0
3 2015 q1 3.0
您可能需要查看merge, join & concat docs。
最“直观”的方式可能是.append()
:
df1.append(df2)
Year Quarter Value
0 2014 q2 2.0
1 2013 q1 1.0
2 2016 q1 3.0
3 2015 q1 3.0
如果你查看源代码,你会发现它在幕后调用concat
。
Merge
非常有用,适用于columns
值重叠的情况。
答案 1 :(得分:2)
pandas concat
更适合这种情况。
pd.concat([df1, df2]).reset_index(drop=True)
Year Quarter Value
0 2014 q2 2
1 2013 q1 1
2 2016 q1 3
3 2015 q1 3
concat
旨在将一个数据框放在另一个数据框旁边,同时保持索引或列对齐。在默认情况下,它会使列保持对齐。考虑到您的示例数据框,列已对齐,并且您所声明的预期输出显示df2
恰好位于列对齐的df1
之后。您所要求的每个方面都正是concat
旨在提供的内容。我所做的就是指出一个合适的功能。
答案 2 :(得分:1)
您正在寻找追加功能:
df_final = df1.append(df2)