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

如何为Pandas DataFrame每行生成50个随机数并与指定列相乘生成新列?

最优实现方式

直接利用Numpy的广播机制做向量化运算,比apply效率高得多,尤其当数据量较大时:

import pandas as pd
import numpy as np

colnum = 50
b = [f"t{x}" for x in range(colnum)]  # 新列名
df = pd.DataFrame([[i] for i in range(10)], columns=['num'])  # 示例DataFrame

# 生成行数与df一致、列数为colnum的随机数矩阵
random_matrix = np.random.lognormal(0, 1, size=(len(df), colnum))
# 利用广播将原列与随机矩阵相乘,直接赋值给新列
df[b] = df['num'].to_numpy()[:, np.newaxis] * random_matrix

原代码问题分析

你用apply返回的是一个元素为列表的Series,Pandas无法自动将这些列表拆分成多列。而向量化方式直接生成二维数组,和目标列结构完全匹配,能直接对应到50个新列上。

补充说明

  • 用to_numpy()[:, np.newaxis]把原列的一维数组转换成二维列向量,这样和random_matrix(二维矩阵)相乘时会触发广播机制,每行的数值都会和该行的50个随机数逐一相乘。
  • 这种方法完全避免了逐行循环,运算效率远高于apply,适合处理大规模数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:06