如何用Python将DataFrame所有观测值除以DC列对应单元格值?
pandas高效实现DataFrame逐行除以指定列的方法
直接用pandas的向量化除法操作即可,完全不需要iterrows这种低效的循环方法,代码如下:
1. 构造示例数据
import pandas as pd # 模拟你的原始DataFrame df = pd.DataFrame({ 'AB': [40, 10], 'BC': [50, 20], 'DA': [4, 10], 'DC': [10, 5], 'FF': [60, 20] })
2. 执行逐行除法操作
# 整个DataFrame除以DC列的对应行值,axis=0表示按行对齐广播 new_df = df.div(df['DC'], axis=0)
执行后new_df的正确结果如下:
| AB | BC | DA | DC | FF |
|---|---|---|---|---|
| 4 | 5 | 0.4 | 1 | 6 |
| 2 | 4 | 2 | 1 | 4 |
(注:你提供的示例结果第二行存在笔误,按照“所有观测值除以DC列对应单元格值”的逻辑,第二行各值应为10/5=2、20/5=4、10/5=2、5/5=1、20/5=4)
为什么这个方法最优?
- 效率极高:向量化操作基于numpy底层实现,避免了Python层面的循环,对于你这种300+行、4000+列的大DataFrame,速度比
iterrows快几个数量级。 - 代码简洁:一行代码完成需求,可读性强,不容易出错。
- 自动对齐:pandas会自动按行索引对齐,不需要手动处理行匹配问题。
内容的提问来源于stack exchange,提问作者kukulu
相关产品推荐
相关产品推荐

