本文介绍在 pandas 中基于多级索引(如 po + item)批量更新 dataframe 字段(如 qty)的正确方法,避免在 `itertuples()` 循环中直接修改行对象的无效操作,并提供简洁、向量化、可复用的解决方案。
在使用 df.itertuples() 遍历时,返回的是一个命名元组(namedtuple),它是只读的快照对象,对 rowB.Qty = ... 这类赋值操作不会影响原始 DataFrame df_B —— 这正是你卡在 ??? This is where I am stuck 的根本原因。Pandas 不支持通过迭代器“原地”修改底层数据;必须显式调用 .loc, .iloc, .at 或向量化运算来更新。
✅ 正确做法是:放弃嵌套循环,改用基于索引对齐的向量化更新。前提是两表具有相同结构的索引(如 ["PO", "Item"]),这能极大提升性能与可读性。
import pandas as pd
# 读取数据
df_A = pd.read_csv('file_A.csv', header=0)
df_B = pd.read_csv('file_B.csv', header=0)
# 设置多级索引(关键!确保索引列名和顺序一致)
df_A = df_A.set_index(['PO', 'Item'])
df_B = df_B.set_index(['PO', 'Item'])
# 找出 df_A 和 df_B 在索引层面的交集(即同时存在于两表中的 (PO, Item) 组合)
common_idx = df_B.index.intersection(df_A.index)
# 对交集部分执行批量更新:df_B['Qty'] -= df_A['Qty']
df_B.loc[common_idx, 'Qty'] = df_B.loc[common_idx, 'Qty'] - df_A.loc[common_idx, 'Qty']
# 或更简洁写法(推荐):
# df_B.loc[common_idx, 'Qty'] -= df_A.loc[common_idx, 'Qty']? 提示:df_B.loc[common_idx, 'Qty'] -= ... 是原子级就地更新,无需 copy() 或重新赋值整个 DataFrame。
# 构造测试数据
df_A = pd.DataFrame({'PO': ['A','B','B'], 'Item': ['b','c','d'], 'Qty': [2,4,4]}).set_index(['PO','Item'])
df_B = pd.DataFrame({'PO': ['A','A','B','B'], 'Item': ['a','b','c','d'], 'Qty': [10,10,10,10]}).set_index(['PO','Item'])
print("更新前 df_B:")
print(df_B)
# Qty
# PO Item
# A a 10
# b 10
# B c 10
# d 10
common_idx = df_B.index.intersection(df_A.index)
df_B.loc[common_idx, 'Qty'] -= df_A.loc[common_idx, 'Qty']
print("\n更新后 df_B:")
print(df_B)
# Qty
# PO Item
# A a 10 # 未匹配,保持不变
# b 8 # 10 - 2
# B c 6 # 10 - 4
# d 6 # 10 - 4用 itertuples() 修改 DataFra
me 字段是常见误区;真正高效、可靠、符合 Pandas 设计哲学的方式是:对齐索引 → 定位交集 → 向量化更新。该方法时间复杂度从 O(n×m) 降至 O(min(n,m)),代码更短、更健壮、更易测试与维护。
# app
# csv
# pandas
# 循环
# copy
# 对象
# this
# 行号
# 的是
# 遍历
# 设为
# 它是
# 这类
# 可在
# 不支持
# 不适合
# 报错
相关文章:
在线制作视频网站免费,都有哪些好的动漫网站?
常州企业网站制作公司,全国继续教育网怎么登录?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何通过VPS搭建网站快速盈利?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
七夕网站制作视频,七夕大促活动怎么报名?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
红河网站制作公司,红河事业单位身份证如何上传?
建站主机空间推荐 高性价比配置与快速部署方案解析
如何用5美元大硬盘VPS安全高效搭建个人网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何设计高效校园网站?
如何在宝塔面板创建新站点?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
Python多线程使用规范_线程安全解析【教程】
网站制作公司,橙子建站是合法的吗?
如何在万网主机上快速搭建网站?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
建站之星好吗?新手能否轻松上手建站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
网页设计网站制作软件,microsoft office哪个可以创建网页?
建站之星安装后如何自定义网站颜色与字体?
C++如何编写函数模板?(泛型编程入门)
青浦网站制作公司有哪些,苹果官网发货地是哪里?
威客平台建站流程解析:高效搭建教程与设计优化方案
建站之星安装模板失败:服务器环境不兼容?
公众号网站制作网页,微信公众号怎么制作?
如何用已有域名快速搭建网站?
家具网站制作软件,家具厂怎么跑业务?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
简单实现Android文件上传
已有域名如何免费搭建网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
,在苏州找工作,上哪个网站比较好?
python的本地网站制作,如何创建本地站点?
Python路径拼接规范_跨平台处理说明【指导】
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
网站制作软件有哪些,制图软件有哪些?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何快速生成凡客建站的专业级图册?
建站主机无法访问?如何排查域名与服务器问题
,有什么在线背英语单词效率比较高的网站?
制作表格网站有哪些,线上表格怎么弄?
C#怎么使用委托和事件 C# delegate与event编程方法
如何在阿里云域名上完成建站全流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。