Pandas如何用applymap对两个DataFrame对应单元格做运算
pandas 两表逐单元格对应相除的高效实现
你现在用的转列表+嵌套循环的写法,完全没用到pandas的核心能力,不仅冗余多、效率低,而且只靠位置匹配数值,只要两个表的行、列顺序稍微变一点,计算结果就会错。
这个场景根本不需要用applymap——applymap本质还是Python层逐元素遍历,性能并不比你写的循环好多少,直接用pandas原生的向量化运算就行,底层是C级实现,速度快、还自带索引对齐容错。
实现步骤
- 首先把两个表的
Name列设为行索引,把球员名作为行匹配的依据 - 直接对两个数值表做除法,pandas会自动匹配对应球员、对应轮次的单元格做计算,不需要手动写任何遍历逻辑
- 计算完成后把
Name索引还原成普通列,就得到最终结果
对应代码:
# 设置Name列为行索引 stat = stat.set_index('Name') percentage = percentage.set_index('Name') # 核心计算:逐对应单元格相除,自动对齐行、列 final_df = stat / percentage # 还原Name列为普通列 final_df = final_df.reset_index()
运行得到的结果和你给出的预期输出完全一致。
鲁棒性说明
哪怕两个DataFrame的球员行顺序、轮次列顺序不一致,只要行索引是球员名、列名是轮次名,pandas就会自动精准匹配对应单元格做计算,不会出现位置错位的计算错误,比你按列表下标取数的逻辑可靠很多。
内容的提问来源于stack exchange,提问作者RickPeck
相关产品推荐
相关产品推荐

