我有两个 Dataframe ,每个 Dataframe 有两个索引列。我想合并它们。例如,第一个 Dataframe 如下:
V1
A 1/1/2012 12
2/1/2012 14
B 1/1/2012 15
2/1/2012 8
C 1/1/2012 17
2/1/2012 9
第二个 Dataframe 如下:
V2
A 1/1/2012 15
3/1/2012 21
B 1/1/2012 24
2/1/2012 9
D 1/1/2012 7
2/1/2012 16
因此我想得到以下结果:
V1 V2
A 1/1/2012 12 15
2/1/2012 14 N/A
3/1/2012 N/A 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 17 N/A
2/1/2012 9 N/A
D 1/1/2012 N/A 7
2/1/2012 N/A 16
我已经尝试了几个版本使用pd.merge
和.join
方法,但似乎没有工作。你有什么建议吗?
3条答案
按热度按时间0pizxfdo1#
您应该能够使用
join
,默认情况下它在索引上进行连接。如果您想要得到所需的结果,则必须使用outer
作为连接类型。签名:_.join(其他,打开=无,方式=“左”,左后缀=“”,右后缀=“”,排序=False)文档字符串:在索引或键列上将列与其他DataFrame联接。通过传递列表,一次按索引高效地联接多个DataFrame对象。
tyg4sfes2#
您可以使用
merge
执行此操作:关键字参数
how='outer'
保留两个帧中的所有索引,用NaN
填充缺失的索引。关键字参数left_index
和right_index
使合并在索引上完成。如果在合并后得到一列中的所有NaN
,另一个故障排除步骤是验证索引是否具有相同的dtypes
。上面的
merge
代码为我生成了以下输出:6jjcrrmo3#
您也可以水平连接,因为
concat
在索引上匹配并且默认执行外部连接,所以只需传递axis=1
参数来指定水平连接就足够了。与
merge
和join
1相比,concat
的一个优点是,您可以传递一个 Dataframe 列表,并一次连接许多帧,而不会引起太大的麻烦。1对于
join
也可以这样做,但是如果有重复的列名,则必须在join
调用之前处理它们,而对于concat
,这无关紧要。