PySpark合并两个DataFrame求助:如何实现指定关联输出
解决方案:用左连接合并DataFrame
你用union不对,因为union是用来把同结构的DataFrame行叠加的,而你需要的是按关联键把两个表的列合并,匹配的行展开,不匹配的补空值,这得用merge函数做左外连接。
代码实现
import pandas as pd # 构造示例df1 df1 = pd.DataFrame({ 'Id-name': [21171, 21171, 21171, 21171, 22000], 'Match': ['2500B', '2400B', '2400C', '3000A', '1000A'], 'Title': ['Title1', 'Title2', 'Title3', 'Title4', 'Title5'] }) # 构造示例df2 df2 = pd.DataFrame({ 'Prio': ['2500B', '2500B', '2500B', '1000A', '1000A', '1000A', '1000A'], 'Document': ['Doc1', 'Doc2', 'Doc3', 'Doc5', 'Doc6', 'Doc7', 'Doc8'] }) # 左连接合并:按df1.Match和df2.Prio匹配,保留df1所有行 result = pd.merge(df1, df2, left_on='Match', right_on='Prio', how='left') print(result)
关键参数说明
left_on='Match':指定用df1的Match列作为关联键right_on='Prio':指定用df2的Prio列作为关联键how='left':强制保留df1的所有行,df2中匹配不到的行,对应列会填充NaN(即你需要的null)
注:你期望结果中22000行的Prio写成1000B属于笔误,实际运行后会正确显示为1000A,与df2的Prio值一致。
内容的提问来源于stack exchange,提问作者Blaze
相关产品推荐
相关产品推荐

