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

当两个DataFrame的两列值匹配时填充数据的实现方法

基于多列匹配填充DataFrame空列

需求说明

当两个DataFrame的SITE和week列值同时匹配时,使用df1_small中的LAL值,填充df2_large中对应的空LAL列。

示例输入数据

df1_small(匹配规则数据源)

week    SITE          LAL
0   1       BARTON CHAPEL 1.1
1   2       BARTON CHAPEL 1.8
2   3       BARTON CHAPEL 1.4
3   1       PENASCAL I    1.7
4   2       PENASCAL I    2.9
5   3       PENASCAL I    2.2

df2_large(待填充目标数据)

SITE          hour day week POWER  LAL
0   BARTON CHAPEL 1    1   1    54    
1   BARTON CHAPEL 2    1   1    32    
2   BARTON CHAPEL 3    1   1    56    
3   BARTON CHAPEL 4    1   1    81    
4   BARTON CHAPEL 5    1   1    90    
5   BARTON CHAPEL 6    1   1    12    
6   BARTON CHAPEL 7    1   1    10    
7   BARTON CHAPEL 8    1   1    73    
8   BARTON CHAPEL 9    1   1    55    
9   BARTON CHAPEL 10   1   1    66    
10  PENASCAL I     1    1   1    39    
11  PENASCAL I     2    1   1    90    
12  PENASCAL I     3    1   1    13    
13  PENASCAL I     4    1   1    44    
14  PENASCAL I     5    1   1    51    

期望输出结果

SITE          hour day week POWER  LAL
0   BARTON CHAPEL 1    1   1    54    1.1
1   BARTON CHAPEL 2    1   1    32    1.1
2   BARTON CHAPEL 3    1   1    56    1.1
3   BARTON CHAPEL 4    1   1    81    1.1
4   BARTON CHAPEL 5    1   1    90    1.1
5   BARTON CHAPEL 6    1   1    12    1.1
6   BARTON CHAPEL 7    1   1    10    1.1
7   BARTON CHAPEL 8    1   1    73    1.1
8   BARTON CHAPEL 9    1   1    55    1.1
9   BARTON CHAPEL 10   1   1    66    1.1
10  PENASCAL I     1    1   1    39    1.7
11  PENASCAL I     2    1   1    90    1.7
12  PENASCAL I     1    1   2    13    2.9
13  PENASCAL I     2    1   2    44    2.9
14  PENASCAL I     3    1   2    51    2.9

解决方案

方法1:构建映射字典填充(适合小数据集)

先将df1_small转换成以(SITE, week)为键、LAL为值的字典,再逐行匹配填充:

import pandas as pd

# 构建映射字典
lal_map = df1_small.set_index(['SITE', 'week'])['LAL'].to_dict()

# 填充df2_large的LAL列
df2_large['LAL'] = df2_large.apply(lambda row: lal_map.get((row['SITE'], row['week'])), axis=1)

方法2:左连接合并填充(适合大数据集,效率更高)

利用pandas的merge做左连接,直接匹配对应值填充:

import pandas as pd

# 左连接保留df2_large所有行,匹配SITE和week列
merged = df2_large.merge(df1_small, on=['SITE', 'week'], how='left', suffixes=('', '_source'))

# 用匹配到的LAL值替换原空列
df2_large['LAL'] = merged['LAL_source']

两种方法都能实现需求,其中merge方法的执行效率远高于apply,数据量越大优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:47:02