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

如何将Pandas DataFrame的每一列除以一个Series?

解决Pandas DataFrame按行除以对应Series值的问题

嗨,我来帮你搞定这个问题!你遇到的核心问题是divide方法里的axis参数用错了,咱们一步步来解决:

问题分析

你想让DataFrame每一行的所有列元素,都除以Series对应行的值,但你用了axis=1——这个参数的意思是按列对齐,也就是Pandas会尝试把DataFrame的列名和Series的索引(当作列名)去匹配,这显然不是你要的行级除法,所以结果不符合预期。

正确解决方案

我们需要指定按行对齐,有两种简单的方式:

方式1:直接用除法运算符(推荐,更简洁)

Pandas会自动将Series广播到DataFrame的每一列,实现行级除法:

df = df / data_series

方式2:用divide方法并指定axis=0

明确告诉Pandas按行索引对齐,让每行的元素除以Series对应行的值:

df = df.divide(data_series, axis=0)

关于NaN的处理

不用担心NaN的问题,Pandas的除法会自动保留原DataFrame中的NaN值(比如原单元格是NaN,除以任何数结果还是NaN)。如果之后需要填充这些NaN,可以用fillna()方法,比如:

# 把NaN替换为0,根据你的需求调整
df = df.divide(data_series, axis=0).fillna(0)

示例验证

咱们用一个具体例子看看效果:

import pandas as pd
import numpy as np

# 创建带NaN的示例DataFrame
df = pd.DataFrame({
    'A': [10, 20, np.nan, 40],
    'B': [5, np.nan, 15, 20]
})

# 创建和DataFrame行索引匹配的Series
data_series = pd.Series([2, 4, 5, 8], index=df.index)

# 执行行级除法
result = df.divide(data_series, axis=0)
print(result)

输出结果:

A    B
0  5.0  2.5
1  5.0  NaN
2  NaN  3.0
3  5.0  2.5

完全符合预期:每行的元素都除以了对应行的Series值,NaN也被保留了下来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:27