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

Pandas中为不同列匹配对应常数相乘的更优雅实现方法问询

替代For循环实现Pandas列按对应常数乘法并生成MultiIndex列

方法1:批量处理列后合并(推荐)

通过批量选择目标列、执行向量化运算,再重命名列并合并到原DataFrame,完全避免循环:

import pandas as pd
import numpy as np
np.random.seed(0)

const_val=dict(a_b_c=15,
               dd_ee=20,
               ff_ff=15,
               abc=15,
               devb=20,)

df = pd.DataFrame(data=np.random.randint(5, size=(3, 6)),
                  columns=['id','a_b_c','dd_ee','ff_ff','abc','devb'])

reval=6

# 批量处理目标列:按字典匹配常数完成乘法
processed_cols = df[const_val.keys()].mul(const_val, axis=1) / reval
# 将新列名转换为MultiIndex格式
processed_cols.columns = pd.MultiIndex.from_tuples([('per_a', col) for col in processed_cols.columns])
# 合并到原DataFrame
df = df.join(processed_cols)

方法2:用assign结合字典推导式

一行代码完成所有新列的添加,利用字典推导式生成每个MultiIndex列的计算逻辑:

df = df.assign(**{('per_a', col): df[col] * val / reval for col, val in const_val.items()})

结果验证

两种方法生成的DataFrame与原For循环实现的结果完全一致,最终列结构包含MultiIndex格式的新列:

id  a_b_c  dd_ee  ff_ff  abc  devb  (per_a, a_b_c)  (per_a, dd_ee)  (per_a, ff_ff)  (per_a, abc)  (per_a, devb)
0   4      0      3      3    3     1             0.0            10.0             7.5           7.5       3.333333
1   3      2      4      0    0     4             5.0            13.333333        0.0           0.0      13.333333
2   2      1      0      1    1     0             2.5             0.0            2.5           2.5       0.000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:10:20