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

如何实现DataFrame行与numpy数组的相乘操作?

如何将Pandas DataFrame的行与NumPy数组相乘

先把你的示例DataFrame用代码复现出来,方便咱们一步步演示:

import pandas as pd
import numpy as np

data = {
    'Date': ['2018-03-28', '2018-03-29', '2018-04-02', '2018-04-03', '2018-04-04',
             '2018-04-05', '2018-04-06', '2018-03-23', '2018-03-26', '2018-03-27',
             '2018-03-28', '2018-03-29', '2018-04-02', '2018-04-03', '2018-04-04',
             '2018-04-05'],
    'Last': [64.67, 64.91, 62.85, 63.57, 63.56, 63.73, 61.93, 65.74, 65.49, 64.67,
             64.67, 64.91, 62.85, 63.57, 63.56, 63.73],
    'portfolioID': [1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3],
    'FinancialInstrument': ['Oil']*16
}

df = pd.DataFrame(data)

接下来分两种最常见的场景来处理,你可以根据自己的需求选择:


场景1:给指定数值列批量乘对应系数

你的DataFrame里,Last和portfolioID是数值型列,Date、FinancialInstrument这类字符串/日期列没法参与乘法。假设你有一个长度和数值列数量一致的NumPy数组,想让每一行的数值元素和数组对应位置相乘:

先定义乘数数组:

# 第一个元素对应Last列的乘数,第二个对应portfolioID列
multiplier = np.array([0.5, 2])

然后筛选出数值列做运算,再把结果合并回原DataFrame:

# 筛选所有数值类型的列
numeric_cols = df.select_dtypes(include=np.number)
# 逐元素相乘
result_numeric = numeric_cols * multiplier
# 把结果替换回原DataFrame(保留非数值列)
df_updated = df.copy()
df_updated[numeric_cols.columns] = result_numeric

这样处理后,Last列的值会变成原来的0.5倍,portfolioID会翻倍,非数值列完全不变。


场景2:给每行的特定列乘独特系数

如果你的需求是给每一行的某个数值列(比如Last)分配一个专属的乘数,也就是用一个长度和DataFrame行数一致的数组来逐行相乘:

示例代码如下:

# 生成一个和行数相同的数组(这里用随机数,你换成自己的数组就行)
row_multipliers = np.random.rand(len(df))
# 给Last列逐行相乘,新增一列存储结果
df['Last_multiplied'] = df['Last'] * row_multipliers

执行后会新增Last_multiplied列,每一行的值都是对应Last值和数组元素的乘积。


几个要注意的点

  • 一定要保证数组的长度和目标列/行的长度匹配,不然会抛出维度不匹配的错误;
  • 非数值列别拿去乘,先筛选出数值列再操作,避免报错;
  • 如果不想修改原始数据,记得先拷贝一份再操作(比如用df.copy()),防止误改原数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:10