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

Python pandas如何用另一张表覆盖主表指定两列数据且避免重复

pandas批量更新主表股价的实现方案

核心逻辑是避开merge/concat的全量拼接逻辑,以股票名称为唯一匹配键定向更新字段,从根源避免重复数据。

方案1:map字典匹配法(逻辑简单,推荐新手使用)

首先将每日股价表转换为「股票名: 最新股价」的映射字典,直接匹配更新主表股价列,未匹配到的股票保留原有股价:

import pandas as pd

# 1. 构造/读取你的主表
main_df = pd.DataFrame({
    '持有人': ['John', 'Katie', 'Emma'],
    '股票名称': ['苹果', '特斯拉', '三星'],
    '持股数': [4, 10, 50],
    '当日股价': [150, 220, 60]
})

# 2. 构造/读取每日最新股价表
daily_price_df = pd.DataFrame({
    '股票名称': ['苹果', '特斯拉'],
    '最新股价': [155, 235]
})

# 3. 执行更新操作
price_map = daily_price_df.set_index('股票名称')['最新股价'].to_dict()
# 匹配到的用新股价,没匹配到的保留旧值
main_df['当日股价'] = main_df['股票名称'].map(price_map).fillna(main_df['当日股价']).astype(int)

方案2:update索引匹配法(适合多字段批量更新场景)

通过对齐索引实现精准匹配更新,不会新增行、也不会修改未匹配的记录:

# 两张表统一用股票名称作为匹配索引
main_df = main_df.set_index('股票名称')
daily_price_df = daily_price_df.set_index('股票名称')

# 对齐字段名后执行更新,仅覆盖匹配到的行的对应字段
main_df.update(daily_price_df.rename(columns={'最新股价': '当日股价'}))

# 更新完成后重置索引,恢复原有表结构
main_df = main_df.reset_index()

注意:如果需要提前过滤无效股价数据,可以加一步过滤:daily_price_df = daily_price_df[daily_price_df['股票名称'].isin(main_df['股票名称'])],排除主表不存在的股票记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:04