Pandas DataFrame列间数据迁移:按df2价格差异更新df1字段
Pandas 跨表对比批量更新价格方案
全矢量化操作实现,无Python层遍历,可适配千万级以上数据集,性能远高于行遍历或apply方案。
完整实现代码:
import pandas as pd # 1. 构建df2的Reference_Code到Price_Now的映射,索引查询效率远高于逐行匹配 df2_idx = df2.set_index("Reference_Code")["Price_Now"] # 2. 对齐df1的Reference_Code拉取df2的对应价格 df1["df2_price"] = df1["Reference_Code"].map(df2_idx) # 3. 生成价格不一致的行掩码,额外增加notna判断可过滤df2中不存在的编码,避免误更新 diff_mask = (df1["Price_Now"] != df1["df2_price"]) & df1["df2_price"].notna() # 4. 仅更新价格不一致的行 df1.loc[diff_mask, "Last_Price"] = df1.loc[diff_mask, "Price_Now"] df1.loc[diff_mask, "Price_Now"] = df1.loc[diff_mask, "df2_price"] # 5. 删除临时辅助列 df1 = df1.drop(columns="df2_price")
效率说明:
- 所有操作均为pandas底层C实现的矢量化运算,单表千万行量级操作耗时通常在秒级
- 内存占用可控,仅新增1列临时辅助数据,无需额外复制全量数据集
- 如需进一步压缩内存开销,可在处理完成后对浮点数列做精度降级:
df1["Last_Price"] = pd.to_numeric(df1["Last_Price"], downcast="float")
内容的提问来源于stack exchange,提问作者in_d
相关产品推荐
相关产品推荐

