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

为何DataFrame与提取自某行的Series相减时所有行均参与运算?

问题解析:DataFrame与Series减法作用于所有行的原因

先看你给出的代码示例:

import pandas as pd
import numpy as np

df2 = pd.DataFrame(np.arange(9).reshape(3,3), columns=['a','b','c'], index=['car','bike','cycle'])
print(df2)
#        a  b  c
# car    0  1  2
# bike   3  4  5
# cycle  6  7  8

ser_c= df2.loc['car']
print(ser_c)
# a    0
# b    1
# c    2
# Name: car, dtype: int32

print(df2 - ser_c)
#         a   b   c
# car     0   0   0
# bike    3   3   3
# cycle   6   6   6

你疑惑为什么减法会作用于所有行,核心原因是pandas的按列对齐+广播机制:

  • 首先看ser_c的结构:它的索引是['a','b','c'],和df2的列名完全匹配,而不是行索引(car、bike、cycle)。pandas会默认把这种Series识别为「与DataFrame列对齐」的对象。
  • 当DataFrame和Series做算术运算时,pandas会自动把Series广播到DataFrame的每一行——也就是把ser_c的值(a=0, b=1, c=2)复制到df2的每一行,然后逐位置做减法运算,所以所有行都会参与计算。

如果只想让car行做减法,你需要明确指定操作的行,比如:

df2.loc['car'] = df2.loc['car'] - ser_c
print(df2)
#        a  b  c
# car    0  0  0
# bike   3  4  5
# cycle  6  7  8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:09