如何对列不同的两个Pandas DataFrame执行concat实现对齐合并
Pandas按公共列对齐合并两个DataFrame的解决方案
你之前使用pd.concat时指定axis=0是纵向堆叠行的逻辑,只会把两个DataFrame的行直接追加,不会按公共列A的值做行匹配对齐,所以不符合需求。有两种常用方案可以实现目标效果:
方法1:使用pd.merge外连接(最直观)
直接指定公共关联列、连接方式为外连接即可保留两个表所有A列的取值,匹配不到的字段自动填充NaN:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({'A': ['a1', 'a2', 'a3'], 'B': ['b1', 'b2', 'b3']}) df2 = pd.DataFrame({'A': ['a1', 'a4'], 'C': ['c1', 'c4']}) # 外连接合并 res = pd.merge(df1, df2, on='A', how='outer')
运行后res的输出就是你需要的目标结果:
| A | B | C |
|---|---|---|
| a1 | b1 | c1 |
| a2 | b2 | NaN |
| a3 | b3 | NaN |
| a4 | NaN | c4 |
方法2:使用pd.concat按索引对齐实现
如果要使用concat,需要先把公共列A设为两个DataFrame的索引,再指定axis=1横向拼接,concat会自动按索引对齐取值,最后重置索引即可:
res = pd.concat( [df1.set_index('A'), df2.set_index('A')], axis=1 ).reset_index()
两种方法得到的结果完全一致,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者Joan Arau
相关产品推荐
相关产品推荐

