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

如何使用Pandas合并并更新DataFrame:按规则同步数据

Pandas DataFrame合并与更新实现方案

原始数据定义

import pandas as pd

data1 = {
         'Product': ['product1', 'product2', 'product3'],
         'Price': [200, 300, 400],
         'Quantity': [10, 5, 20],
    }
df1 = pd.DataFrame(data1, columns= ['Product','Price','Quantity'])

data2 = {
         'Product': ['product1','product2','product4'],
         'Price': [200, 1000,50],
}

df2 = pd.DataFrame(data2, columns= ['Product','Price'])

df1输出:

Product  Price  Quantity
0  product1    200        10
1  product2    300         5
2  product3    400        20

df2输出:

Product  Price
0  product1    200
1  product2   1000
2  product4     50

合并更新规则

  • 添加df2中的新商品(如product4)并保留其已有Price信息
  • 保留df1中不在df2的商品,但将其Price设为-1
  • 同时存在于两个DataFrame的商品,仅更新其Price(如product2)
  • 其余数据保持原有状态

实现代码

# 以Product为键做全外连接,区分两个表的Price列
merged_df = df1.merge(df2, on='Product', how='outer', suffixes=('_df1', '_df2'))

# 按规则处理Price列
merged_df['Price'] = merged_df.apply(
    lambda row: row['Price_df2'] if pd.notna(row['Price_df2']) 
                else (-1 if pd.notna(row['Price_df1']) 
                else row['Price_df2']),
    axis=1
)

# 处理Quantity列:保留df1原有值,新商品设为NaN
merged_df['Quantity'] = merged_df['Quantity'].fillna(pd.NA)

# 筛选目标列并重置索引
result_df = merged_df[['Product', 'Price', 'Quantity']].reset_index(drop=True)

print(result_df)

输出结果:

Product  Price Quantity
0  product1    200       10
1  product2   1000        5
2  product3     -1       20
3  product4     50      <NA>

代码说明

  1. 全外连接合并:用merge的outer方式确保所有商品都被保留,通过suffixes标记来自两个表的Price字段,避免冲突
  2. Price列逻辑:
    • 同时存在于两个表的商品,直接取df2的Price值完成更新
    • 仅在df1存在的商品,强制将Price设为-1
    • 仅在df2存在的商品,保留df2的原始Price值
  3. Quantity列处理:保留df1中已有的Quantity数据,新增商品的Quantity自动填充为缺失值
  4. 结果整理:筛选需要的列并重置索引,得到符合要求的最终格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:30:21