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

Python中如何实现DataFrame特征列与对应系数的逐元素乘法?

问题:如何将DataFrame特征列与对应系数相乘生成新DataFrame?

背景与需求

我有一个存储线性回归特征的DataFrame df1:

import pandas as pd
df1 = pd.DataFrame({'yyyyww': ['2022-01','2022-02','2022-03', '2022-04','2022-05','2022-06','2022-07','2022-08','2022-09','2022-10'],
                         'feature1': [1000,2000,4000,3000,5000,2000,8000,2000,4000,3000],
                         'feature2': [9000,7000,3000,1000,2000,3000,6000,8000,1000,1000],
                         'feature3': [3000,1000,2000,5000,9000,7000,2000,3000,5000,9000]})

模型训练后得到系数DataFrame df2:

df2 = pd.DataFrame({'feature': ['feature1','feature2','feature3'],
                         'coefficient': [-1,2,0.5]})

需要生成df3,要求每个特征列的值是df1对应列与df2中对应系数的乘积,预期结果如下:

df3 = pd.DataFrame({'yyyyww': ['2022-01','2022-02','2022-03', '2022-04','2022-05','2022-06','2022-07','2022-08','2022-09','2022-10'],
                         'feature1': [-1000,-2000,-4000,-3000,-5000,-2000,-8000,-2000,-4000,-3000],
                         'feature2': [18000,14000,6000,2000,4000,6000,12000,16000,2000,2000],
                         'feature3': [1500,500,1000,2500,4500,3500,1000,1500,2500,4500]})

我尝试用mul和multiply方法实现,但没得到预期结果,代码如下:

features = [['feature1', 'feature2', 'feature3']]

results = pd.DataFrame()

for cols in features:
    results[cols] = df1[cols] 

results = df1.mul(df2['coefficient'], axis =0)
results

问题原因

你这段代码跑不对的问题出在两点:

  • df2['coefficient']的索引是0、1、2,而df1的特征列名是feature1、feature2、feature3,用axis=0时,pandas会按行索引匹配相乘,完全对应不上正确的特征列,最终会生成大量NaN值。
  • 你写的循环完全多余,没有实际作用,相当于白复制了一遍数据。

解决方法

方法一:转换系数为特征索引的Series,按列匹配相乘(推荐)

先把df2转换成以特征名为索引的系数Series,再用mul方法按列匹配相乘,最后保留yyyyww列:

# 将df2转为以feature为索引的系数Series
coeff_series = df2.set_index('feature')['coefficient']

# 复制原df1,对特征列执行相乘操作
df3 = df1.copy()
df3[coeff_series.index] = df1[coeff_series.index].mul(coeff_series, axis=1)

print(df3)

方法二:用字典映射系数,逐列处理(适合特征少的场景)

如果特征数量不多,也可以手动构建特征-系数的字典,循环处理每一列:

# 创建特征到系数的映射字典
coeff_dict = dict(zip(df2['feature'], df2['coefficient']))

df3 = df1.copy()
for feature, coeff in coeff_dict.items():
    df3[feature] = df3[feature] * coeff

print(df3)

两种方法都能生成你预期的df3结果,其中方法一更简洁高效,适合特征较多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:51:06