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

无需遍历列:如何实现Pandas DataFrame列与匹配字典值相乘?

无需遍历列实现Pandas列值与字典映射值相乘的简洁方法

原始数据定义

import pandas as pd
df = pd.DataFrame({
    'category': [1,2,3,4,5],
    'a': [5,4,3,3,4],
    'b': [3,2,4,3,10],
    'c': [3, 2, 1, 1, 1]
})

lookup = {1:0, 2:4, 3:1, 4:6, 5:2}

原遍历实现

你原本通过遍历列的方式完成需求:

for t in df.columns[1:]:
    df[t] = df[t].mul(df['category'].map(lookup)).fillna(df[t])

无遍历的简洁实现

可以利用Pandas的广播特性,一次性对所有目标列完成操作,无需遍历:

# 生成category对应的字典映射值
map_values = df['category'].map(lookup)
# 对除category外的所有列执行乘法,保留原列值填充NaN
target_cols = df.columns.drop('category')
df[target_cols] = df[target_cols].mul(map_values, axis=0).fillna(df[target_cols])

更精简的写法

如果追求代码紧凑,也可以合并为一行逻辑:

df[df.columns.drop('category')] = df.drop('category', axis=1).mul(df['category'].map(lookup), axis=0).fillna(df.drop('category', axis=1))

原理说明:Pandas中DataFrame与一维Series进行运算时,会自动沿行方向广播,让Series的每个值匹配对应行的所有列值完成乘法,省去了手动遍历列的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:35:45