两个数据帧的完全外连接

Posted

技术标签:

【中文标题】两个数据帧的完全外连接【英文标题】:Full outer join of two dataframes 【发布时间】:2020-06-10 04:50:08 【问题描述】:

在所有列中保留连接键的完全外连接

我有三个尺寸为 m x 1 的数据框,每个数据框的 m 不同:

df1 = pd.DataFrame('x':['A1', 'A2', 'A3', 'A4'])
df2 = pd.DataFrame('y':['A1', 'A3', 'A5', 'A4'])
df3 = pd.DataFrame('z':['A1','A2', 'A5', 'A6'])

我想要一个像这样的数据框df_merged

     x    y    z
0   A1   A1   A1
1   A2  nan   A2
2   A3   A3  nan
3   A4   A4  nan
4  nan   A5   A5
5  nan  nan   A6

尝试使用 pd.mergepd.concatpd.join 解决这个问题数小时

任何帮助将不胜感激! 谢谢!

【问题讨论】:

【参考方案1】:

在列表理解中使用concat 并通过DataFrame.set_index 按第一列创建索引:

dfs = [df1, df2, df3]

df = pd.concat([x.set_index(x.iloc[:, 0], drop=False) 
                for x in dfs], axis=1, sort=True).reset_index(drop=True)
print (df)
     x    y    z
0   A1   A1   A1
1   A2  NaN   A2
2   A3   A3  NaN
3   A4   A4  NaN
4  NaN   A5   A5
5  NaN  NaN   A6

【讨论】:

以上是关于两个数据帧的完全外连接的主要内容,如果未能解决你的问题,请参考以下文章

使用完全外连接在 pandas 中连接两个数据框

使用完全外连接合并两个数据帧在两个数据帧上没有获得关键列

pyspark 数据帧中的完全外连接

两个字符串数组的完全外连接

如何使用 PySpark 对两个 RDD 进行完全外连接?

在数值最近的索引、完全外连接、聚合列上合并 Pandas 时间序列数据集到最大值