You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据另一DataFrame列的匹配关系更新PySpark DataFrame列?

用df1的值更新df2的Col2列的解决方案

没问题,这其实就是个典型的按匹配键映射值的需求,用Pandas可以轻松实现,我给你两种常用的方法,你可以根据自己的场景选择:

首先先把你给出的示例数据用代码还原出来,方便测试:

import pandas as pd

# 构造df1
df1 = pd.DataFrame({
    'Col1': ['A', 'B', 'C'],
    'Col2': [1, 2, 3]
})

# 构造df2
df2 = pd.DataFrame({
    'Col1': ['A', 'B', 'B'],
    'Col2': ['-', '-', '-']
})

方法1:用字典映射(最简洁高效)

先从df1生成一个Col1到Col2的映射字典,再用map()函数直接替换df2的Col2列:

# 创建Col1到Col2的映射字典
col_mapping = df1.set_index('Col1')['Col2'].to_dict()

# 更新df2的Col2
df2['Col2'] = df2['Col1'].map(col_mapping)

执行后df2的结果就是:

Col1Col2
A1
B2
B2

这种方法速度快,代码简洁,适合只需要替换单列的场景。如果df2里存在df1没有的Col1值,映射后会变成NaN,你可以用fillna()保留原有的'-':

df2['Col2'] = df2['Col1'].map(col_mapping).fillna('-')

方法2:用merge合并(适合多列同步更新)

如果后续需要同步更多列的数据,用merge()左连接会更灵活:

# 左连接df2和df1,只保留需要的列
df2 = df2.merge(df1[['Col1', 'Col2']], on='Col1', how='left', suffixes=('', '_from_df1'))

# 替换原Col2列,然后删除临时列
df2['Col2'] = df2['Col2_from_df1']
df2.drop(columns='Col2_from_df1', inplace=True)

这种方法的好处是可以一次性同步多个关联列,而且能保证df2的所有行都被保留(左连接特性)。

内容的提问来源于stack exchange,提问作者jartymcfly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:36:02