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

如何使用Pandas根据更新数据批量修改大型数据库中的指定值?

高效实现指定客户商品数量的批量更新(Pandas)

针对你提到的大型数据库批量更新需求,首先说下你原代码的问题:customerlist是字符串列表,用i作为索引去取customerlist[i]会直接报错,而且循环遍历的方式对大型数据效率极低,完全没必要。

下面给两种实用的实现方法,根据你的场景选择:

方法一:长格式转换统一处理(适合批量多商品更新)

把宽格式的库存表转成长格式,和更新表合并后计算,再转回宽格式,适合需要统一处理加减逻辑的场景:

import pandas as pd

# 初始化数据
df = pd.DataFrame({'customer' :  ['customer1', 'customer2'], 'item1': [12, 13], 'item2' : [3, 28],'item3': [2, 1]})
df2 = pd.DataFrame({'customer' :  ['customer1', 'customer2'], 'item?': ['item1', 'item1'], 'quantity' : [2, 5]})

# 1. 将库存表转为长格式(customer + item 作为唯一标识)
df_long = df.melt(id_vars='customer', var_name='item', value_name='original_qty')

# 2. 重命名更新表的item列,和长格式表合并
df2_clean = df2.rename(columns={'item?': 'item'})
merged_df = pd.merge(df_long, df2_clean, on=['customer', 'item'], how='left')

# 3. 计算更新后的数量(加法改减法直接换运算符即可)
merged_df['updated_qty'] = merged_df['original_qty'] + merged_df['quantity'].fillna(0)

# 4. 转回宽格式恢复原结构
df_updated = merged_df.pivot(index='customer', columns='item', values='updated_qty').reset_index()
df_updated.columns.name = None  # 清理多余的列索引名

print(df_updated)

输出结果:

customer  item1  item2  item3
0  customer1     14      3      2
1  customer2     18     28      1

方法二:直接定位赋值(大型数据首选,效率更高)

跳过格式转换,直接遍历更新表的每一行,定位库存表中对应的客户和商品列进行加减操作,避免全表操作,适合大型数据库:

import pandas as pd

df = pd.DataFrame({'customer' :  ['customer1', 'customer2'], 'item1': [12, 13], 'item2' : [3, 28],'item3': [2, 1]})
df2 = pd.DataFrame({'customer' :  ['customer1', 'customer2'], 'item?': ['item1', 'item1'], 'quantity' : [2, 5]})

# 遍历更新表的每一行,精准更新对应位置
for _, row in df2.iterrows():
    # 获取当前更新的客户、商品、数量变更值
    target_customer = row['customer']
    target_item = row['item?']
    qty_change = row['quantity']
    
    # 定位到库存表中对应的行和列,执行加法(减法替换为 -= 即可)
    df.loc[df['customer'] == target_customer, target_item] += qty_change

print(df)

同样能得到你想要的结果,而且这种方法只对需要更新的单元格操作,在数据量很大时比方法一快很多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:45:42