dataframe 用正态分布 随机数 替换每一行

我有一个需求,想用每一行的均值和标准差生成随机数来替换每一行。为此需要做如下操作:

  1. 求出每一行的均值和标准差
  2. 按照均值和标准差生成相同数量的随机数
  3. 用随机数替换行的值
# -*- coding: utf-8 -*-
# 你想保留的列索引列表,比如usecols=["1月销量","2月销量","3月销量"]
usecols = ["1月销量","2月销量","3月销量"]
# 读取csv文件
data = pd.read_csv(r"E:\销量报表.csv",usecols=usecols)
# drop掉存在空值的行,看你情况
data.dropna(inplace=True)
# rows表示行数,cols表示列数
rows,cols = data.shape[0],data.shape[1]
 
"""
生成mymean的Series结构,iloc表示按位置索引,选取所有行,列从0到cols,
我这里就是很简单的从0到 # cols-1,末尾不取,所以写cols,求均值用mean,
由于是求行的均值,写上axis = 1,列均值axis = 0
"""
mymean=data.iloc[:,0:cols].mean(axis =1)
# 标准差同理
mystd=data.iloc[:,0:cols].std(axis = 1)
# 获得dataframe的行索引,构造其中元素都是索引的列表
all_indexs = data._stat_axis.values.tolist()
# 。。。列索引的列表。。。
columns = data.columns.values.tolist()
# enumerate就像一个zip ,i是元素位置,index是元素值
for i,index in enumerate(all_indexs):
# 我这里排了个序,当然看你情况
    newrow=np.sort(np.random.normal(loc=mymean.loc[index],scale=mystd.loc[index],size=cols))
    data.loc[index,:]=newrow
print(data.head(100))

还是比较笨的方法,没有用到pandas提供的并行计算的力量,效率不高,有没有大佬提供一个进阶版的,求。

有人可能在读取usecols的时候可能会报错:

Non-UTF-8 code starting with '\xe5' in file

加一个  

# -*- coding: utf-8 -*-  

应该能解决问题

pandas和numpy的官方教程写的非常好,多去看看找找会有很多收获的,google stackoverflow 用英文提问也是挺有意思的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值