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

基于公共列col1合并DataFrame并保留重复行的高效实现方案

高效实现DataFrame基于单列的批量关联填充

问题场景

现有df1如下:

import pandas as pd

index = [0, 1, 2, 3]
columns = ['col0', 'col1']
data = [['A', 'D'],
        ['B', 'E'],
        ['C', 'F'],
        ['A', 'D']
       ]
df1 = pd.DataFrame(data, index, columns)

输出:

col0 col1
0    A    D
1    B    E
2    C    F
3    A    D

现有df2如下:

index = [0, 1]
columns = ['col1', 'col2', 'col3']
data = [['D', 'XX', 'YY'],
        ['E', 'XXX', 'YYY']
       ]
df2 = pd.DataFrame(data, index, columns)

输出:

col1 col2 col3
0    D   XX   YY
1    E  XXX  YYY

需求说明:
需基于col1列关联df1与df2,将df2的col2、col3值填充到df1对应行,无匹配项则填充NaN。df1含大量重复行(实际数据141000行),要求高效实现,禁用iterrows()这类低效率方法,长度匹配时的合并逻辑不适用当前场景。

期望得到的df3:

index = [0, 1, 2, 3]
columns = ['col0', 'col1', 'col2', 'col3']
data = [['A', 'D', 'XX', 'YY'],
        ['B', 'E', 'XXX', 'YYY'],
        ['C', 'F', 'nan', 'nan'],
        ['A', 'D', 'XX', 'YY']
       ]
df3 = pd.DataFrame(data, index, columns)

输出:

col0 col1 col2 col3
0    A    D   XX   YY
1    B    E  XXX  YYY
2    C    F  nan  nan
3    A    D   XX   YY

Pandas 高效解决方案

直接使用pd.merge左连接,指定关联键为col1即可,该方法为向量化操作,效率远高于循环遍历:

df3 = pd.merge(df1, df2, on='col1', how='left')

此方法会自动处理df1中的重复行,只要col1匹配就填充对应值,无匹配则填充NaN,完全满足需求,处理14万行数据无压力。

若df2存在重复的col1值,可先对df2去重,保留每个col1的唯一记录:

df2_unique = df2.drop_duplicates(subset='col1', keep='first')
df3 = pd.merge(df1, df2_unique, on='col1', how='left')

PySpark 解决方案

针对超大规模数据,PySpark处理更高效,逻辑与Pandas一致:

from pyspark.sql import SparkSession

# 初始化SparkSession
spark = SparkSession.builder.appName("JoinExample").getOrCreate()

# 转换为Spark DataFrame
df1_spark = spark.createDataFrame(df1)
df2_spark = spark.createDataFrame(df2)

# 左连接关联
df3_spark = df1_spark.join(df2_spark, on='col1', how='left')

# 查看结果
df3_spark.show()

若df2有重复col1值,先去重再关联:

df2_spark_unique = df2_spark.dropDuplicates(['col1'])
df3_spark = df1_spark.join(df2_spark_unique, on='col1', how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:55:20