如何使用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>
代码说明
- 全外连接合并:用
merge的outer方式确保所有商品都被保留,通过suffixes标记来自两个表的Price字段,避免冲突 - Price列逻辑:
- 同时存在于两个表的商品,直接取df2的Price值完成更新
- 仅在df1存在的商品,强制将Price设为-1
- 仅在df2存在的商品,保留df2的原始Price值
- Quantity列处理:保留df1中已有的Quantity数据,新增商品的Quantity自动填充为缺失值
- 结果整理:筛选需要的列并重置索引,得到符合要求的最终格式
内容的提问来源于stack exchange,提问作者Viald
相关产品推荐
相关产品推荐

