为何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_
相关产品推荐
相关产品推荐

