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
相关产品推荐
相关产品推荐

