如何实现单一行Pandas DataFrame与多行DataFrame的对应列算术运算?
Pandas DataFrame对应列的加减乘运算实现
初始化数据
首先定义问题中的两个DataFrame:
import pandas as pd df1 = pd.DataFrame({"Amounts": [1.1, 2.2, 3.3]}) df2 = pd.DataFrame({"A": [500, 600, 700, 800, 900], "B": [250, 750, 900, 500, 200], "C": [450, 125, 600, 200, 800]})
对应列减法运算
要实现df1的每个值对应减去df2的列(1.1减A列、2.2减B列、3.3减C列),可以利用Pandas的索引对齐和广播机制:
- 将
df1的数值转换成Series,索引设置为df2的列名,确保值和列的对应关系 - 执行减法运算(支持直接用运算符或Pandas的
sub方法)
# 生成匹配df2列名的Series subtract_series = pd.Series(df1['Amounts'].values, index=df2.columns) # 方法1:用运算符实现 result_sub = subtract_series - df2 # 方法2:用Pandas内置方法实现 # result_sub = df2.sub(subtract_series, axis='columns')
运算结果:
A B C 0 -498.9 -247.8 -446.7 1 -598.9 -747.8 -121.7 2 -698.9 -897.8 -596.7 3 -798.9 -497.8 -196.7 4 -898.9 -197.8 -796.7
对应列乘法运算
乘法的实现逻辑和减法完全一致,替换成乘法操作即可:
# 同样生成匹配列名的Series multiply_series = pd.Series(df1['Amounts'].values, index=df2.columns) # 方法1:用运算符实现 result_mul = df2 * multiply_series # 方法2:用Pandas内置方法实现 # result_mul = df2.multiply(multiply_series, axis='columns')
运算结果:
A B C 0 550.0 550.0 1485.0 1 660.0 1650.0 412.5 2 770.0 1980.0 1980.0 3 880.0 1100.0 660.0 4 990.0 440.0 2640.0
注意事项
- 用Series索引匹配的方式不依赖列的顺序,比直接用数组运算(如
df1['Amounts'].values - df2.values)更鲁棒,推荐优先使用 - Pandas会自动对齐索引/列名,只要Series的索引和df2的列名一一对应,就能自动完成逐列运算
内容的提问来源于stack exchange,提问作者Tim Starr
相关产品推荐
相关产品推荐

