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

如何基于列名不同的另一个DataFrame修改目标DataFrame的值?

高效批量更新DataFrame列值(无需if-else)

嘿,这个需求在处理大数据量的DataFrame时太常见了,用循环或者if-else逐行判断不仅代码繁琐,效率还极低。咱们直接用pandas的矢量化操作来搞定,完全符合你的要求,而且速度拉满!

先构造示例数据

首先咱们先把你给出的两个DataFrame还原出来,方便后续测试:

import pandas as pd

# Table 1
table1 = pd.DataFrame(
    data={'Number': [1, 2, 3, 4]},
    index=['A', 'B', 'C', 'D']
)

# Table 2
table2 = pd.DataFrame(
    data={'Alphabet': ['B', 'C'], 'Integer': [25, 30]}
)

方案一:字典映射 + 填充缺失值

先把Table2转换成**{Alphabet: Integer}**的字典,然后利用index.map()匹配更新,再用fillna()保留原有的未匹配值:

# 生成更新字典
update_mapping = table2.set_index('Alphabet')['Integer'].to_dict()

# 批量更新Number列,未匹配的用原值填充
table1['Number'] = table1.index.map(update_mapping).fillna(table1['Number']).astype(int)

方案二:用update()方法(推荐,更高效)

pandas的update()方法专门用来原地更新匹配到的值,只修改有对应映射的行,内存友好,特别适合大数据量场景:

# 把Table2转换成和table1匹配的索引+列名格式
update_series = table2.set_index('Alphabet')['Integer'].rename('Number')

# 原地更新table1的Number列
table1.update(update_series)

最终输出结果

执行完上面任意一种方法后,table1就会变成你想要的样子:

Number
Index       
A           1
B          25
C          30
D           4

为什么不用if-else?

pandas的矢量化操作是基于numpy实现的,底层是C级别的运算,比Python层面的循环/if-else快几十甚至上百倍,尤其是当你的DataFrame有几十万、上百万行的时候,这种效率差距会特别明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:38:13