如何在PySpark中基于单列横向合并多个DataFrame?
基于ID列批量合并多个DataFrame
需求:基于ID列合并以下3个DataFrame,得到指定格式的输出,需要一种简洁的实现方式,方便后续扩展合并更多数量的DataFrame。
输入数据
+---+---+---+ | ID| a| b| +---+---+---+ | A| 1| 1| | B| 2| 2| +---+---+---+ +---+---+---+ | ID| c| d| +---+---+---+ | A| 3|333| | B| 4|444| +---+---+---+ +---+---+---+ | ID| e| f| +---+---+---+ | A|555| 5| | B|666| 6| +---+---+---+
期望输出
+---+---+---+---+---+---+---+ | ID| a| b| c| d| e| f| +---+---+---+---+---+---+---+ | A| 1| 1| 3|333|555| 5| | B| 2| 2| 4|444|666| 6| +---+---+---+---+---+---+---+
解决方案
将待合并的DataFrame存入列表,借助reduce函数批量执行按ID列的合并操作,该方式可轻松扩展到合并更多DataFrame的场景:
# 导入模块(Python3中reduce需从functools导入) from functools import reduce # 创建DataFrame列表 list_df = [df1, df2, df3] # 一次性合并所有DataFrame # 移除后续DataFrame的ID列,避免合并后出现重复列 df_all = reduce(lambda x, y: x.join(y.drop('ID', axis=1), on="ID"), list_df)
注:如果首个DataFrame已将ID设置为索引,可直接使用
reduce(lambda x, y: x.join(y, on="ID"), list_df),无需移除后续DataFrame的ID列。
内容的提问来源于stack exchange,提问作者Zrb
相关产品推荐
相关产品推荐

