我正在尝试合并2个数据框,并且无法获得我想要的内容。
Dataframe 1看起来像这样。
Index Date Data1 Data2
A 2007-07-21 76 32
A 2007-08-13 nan 23
B 2007-06-15 53 nan
B 2007-07-15 87 39
Dataframe 2看起来像这样:
Index Date Data3 Data4
A 2007-07-24 14 nan
A 2007-08-13 67 51
B 2007-06-21 32 36
B 2007-07-15 nan 91
两个数据框中都有相同的标记。索引标签包含重复项。日期中有一些重叠,但每个数据框也包含唯一日期。
我在结果中的含义如下:具有相同索引和日期的行在结果中显示ONCE,并带有组合值(Data1,Data2,Data3,Data4)。如果索引/日期组合在左侧数据框或右侧数据框中出现一次,则该组合与来自相应数据框的相关数据一起显示,并且在数据框中的列中显示不存在值的组合。
从上面的数据框中,结果如下所示:
Index Date Data1 Data2 Data3 Data4
A 2007-07-21 76 32 nan nan
A 2007-07-24 nan nan 14 nan
A 2007-08-13 nan 23 67 51
B 2007-06-15 53 nan nan nan
B 2007-06-21 nan nan 32 36
B 2007-07-15 87 39 nan 91
此练习包含左连接的方面,但也包含外连接。不知道如何使用pd.merge或pd.concat来获取它。
提前感谢您的见解。
答案 0 :(得分:2)
set_index
+ concat
pd.concat([df1.set_index(['Index','Date']),df2.set_index(['Index','Date'])],1).reset_index()
Out[1145]:
Index Date Data1 Data2 Data3 Data4
0 A 2007-07-21 76.0 32.0 NaN NaN
1 A 2007-07-24 NaN NaN 14.0 NaN
2 A 2007-08-13 NaN 23.0 67.0 51.0
3 B 2007-06-15 53.0 NaN NaN NaN
4 B 2007-06-21 NaN NaN 32.0 36.0
5 B 2007-07-15 87.0 39.0 NaN 91.0
或者我们可以使用merge
df1.merge(df2,on=['Index','Date'],how='outer')
Out[1147]:
Index Date Data1 Data2 Data3 Data4
0 A 2007-07-21 76.0 32.0 NaN NaN
1 A 2007-08-13 NaN 23.0 67.0 51.0
2 B 2007-06-15 53.0 NaN NaN NaN
3 B 2007-07-15 87.0 39.0 NaN 91.0
4 A 2007-07-24 NaN NaN 14.0 NaN
5 B 2007-06-21 NaN NaN 32.0 36.0