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

如何按列值匹配将pandas DataFrame指定列与Series相乘

Pandas按列值匹配Series做乘法运算实现方案

问题定义

现有pandas DataFrame对象df与Series对象s,定义如下:

import pandas as pd
df = pd.DataFrame(
    [[0,0,10],[0,1,11],[1,0,12],[1,1,13],[2,0,14],[2,1,15]],
    columns=['a','b','val']
)
s = pd.Series([2,3])

两个对象的基础结构:

  • df 原始数据:
行索引abval
00010
10111
21012
31113
42014
52115
  • s 原始数据:
行索引值
02
13

计算规则

将s的索引值与df的b列值做匹配,取匹配到的s值乘以对应行的val列值,预期val列从原始的[10, 11, 12, 13, 14, 15]转换为[20, 33, 24, 39, 28, 45]。


实现方法

推荐方法:map映射(效率最高、写法最简洁)

直接用b列映射s的取值,拿到每行对应的乘数后和val列做乘法即可,不需要依赖MultiIndex、GroupBy等复杂逻辑:

df['val'] = df['val'] * df['b'].map(s)

执行后打印df可得到完全符合预期的结果:

a  b  val
0  0  0   20
1  0  1   33
2  1  0   24
3  1  1   39
4  2  0   28
5  2  1   45

备选方法:replace匹配

逻辑和map一致,写法如下:

df['val'] = df['val'] * df['b'].replace(s)

常见无效尝试原因说明

直接调用.mul()方法时,pandas默认按行索引对齐做广播运算,而非按指定列的值匹配,因此会出现空值或计算错位;用.apply()逐行判断匹配的写法运行效率远低于向量化的map操作,写法也更冗余。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 16:01:17