如何基于另一DataFrame的数据为当前DataFrame填充指定列
解决方案
核心思路
因为表A数据量远小于表B,优先将小表转为映射字典,直接对大表的匹配字段做映射,避免大表关联的性能损耗,匹配不到的字段默认返回NaN,可根据需求替换为0或空值。
实现代码(Python Pandas)
示例数据构造(实际使用时替换为自己的表A、表B即可)
import pandas as pd # 构造表A df_a = pd.DataFrame({ 'Account': [11,12,13,14,15,16], 'Note': ['a','b','c','d','e','f'] }) # 构造表B df_b = pd.DataFrame({ 'Account': [11,25,42,14,15,19,26] })
核心逻辑
# 把表A转为{Account:Note}的映射字典 note_map = df_a.set_index('Account')['Note'].to_dict() # 给表B新增Note列,直接映射即可 df_b['Note'] = df_b['Account'].map(note_map) # 可选操作:如果需要把NaN替换为0,加下面这行 # df_b['Note'] = df_b['Note'].fillna(0) # 可选操作:如果需要把NaN替换为空白字符串,加下面这行 # df_b['Note'] = df_b['Note'].fillna('')
输出结果验证
最终得到的df_b就是需求中的表C,默认输出效果如下:
Account Note 0 11 a 1 25 NaN 2 42 NaN 3 14 d 4 15 e 5 19 NaN 6 26 NaN
性能说明
该实现方式在表B数据量远大于表A的场景下,性能远高于pd.merge左连接实现,仅需要遍历一次大表的Account字段,不需要做关联笛卡尔积计算,适合大数据量业务场景。
内容的提问来源于stack exchange,提问作者BrianTheMoose
相关产品推荐
相关产品推荐

