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

如何用不同值对DataFrame的各行执行除法运算?

问题:DataFrame每行除以不同值后无变化的原因及解决方法

我有一个简单的DataFrame,希望将每行数据除以不同的值(此处各行是周数据的总和,需除以对应月份的周数)。执行以下代码后无任何变化,结果与除法操作前一致,尝试使用常量调用div函数也得到相同结果。请问问题出在哪里?

用户代码:

number_of_weeks = [4,4,5,1]

for i in range(len(df_Plot.index)):
    df_Plot.iloc[[i][:]].div(number_of_weeks[i])

原始DataFrame示例:

A       B       C       D
Date                                      
2023-01-31  0.0325  3.6375  0.0000   0.025
2023-02-28  0.0300  1.7000  0.0000   0.000
2023-03-31  0.0000  0.4375  0.1875   0.000
2023-04-30  0.0250  0.5500  0.4250   0.000

问题原因

  1. Pandas方法的返回特性:div()方法默认返回一个新的DataFrame/Series对象,不会直接修改原数据。你的代码仅调用了div(),但未将计算结果赋值回原DataFrame的对应行,因此原数据完全没有变化。
  2. 冗余的索引切片:iloc[[i][:]]属于多余写法,等价于iloc[[i]],这部分不影响功能,但增加了代码复杂度。

解决方法

方法一:利用广播机制(推荐,无需循环)

将周数列表转换为与DataFrame索引匹配的Series,Pandas会自动按行匹配执行除法,效率远高于循环:

import pandas as pd

number_of_weeks = [4,4,5,1]
# 创建与原DataFrame索引一致的Series
week_series = pd.Series(number_of_weeks, index=df_Plot.index)
# 执行除法并覆盖原DataFrame
df_Plot = df_Plot.div(week_series, axis=0)

方法二:修正循环逻辑(适合理解基础操作)

如果坚持使用循环,需将div()的结果赋值回原DataFrame的对应行:

number_of_weeks = [4,4,5,1]

for i in range(len(df_Plot.index)):
    # 对单行执行除法,并赋值回原位置
    df_Plot.iloc[i] = df_Plot.iloc[i].div(number_of_weeks[i])

执行上述任一方法后,原DataFrame会更新为每行除以对应周数后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:53:25