python - 有没有办法为大型数据集优化这个循环?
问题描述
我有一个数据集(python),我想在其中按类型(从 -3 到 3)对过去时间的差异进行分类,从均值和标准开始,数据集的长度几乎为 700,000,创建带有分类的数组
def tipo_(x):
dm3 = data.Diff.mean()-2*data.Diff.std()
dm2 = data.Diff.mean()-1*data.Diff.std()
dm1 = data.Diff.mean()
d2 = data.Diff.mean()+1*data.Diff.std()
d3 = data.Diff.mean()+2*data.Diff.std()
Type2 = []
if x <= dm3:
Type2.append(-3)
elif x <= dm2:
Type2.append(-2)
elif x <= dm1:
Type2.append(-1)
elif x >= d3:
Type2.append(3)
elif x >= d2:
Type2.append(2)
elif x > dm1:
Type2.append(1)
return Type2
Tipo2 = np.array(list(map(tipo_,data.Diff))).flatten()
解决方案
您可以使用一些掩码来避免遍历每个元素,即使用整个数据框作为调整函数的输入:
def tipo_(x):
x = np.array(x.Diff)
mean = np.mean(x)
std = np.std(x)
dm3 = mean-2*std
dm2 = mean-std
dm1 = mean
d2 = mean+std
d3 = mean+2*std
out = np.ones(len(x))
out[x <= dm3] = -3
out[np.logical_and(x > dm3, x <= dm2)] = -2
out[np.logical_and(x > dm2, x <= dm1)] = -1
out[np.logical_and(x >= d2, x < d3)] = 2
out[x >= d3] = 3
return out
推荐阅读
- escaping - 如何让 IIS 请求过滤以对拒绝字符串执行完全匹配
- r - 拆分知道一些子字符串的字符串
- javascript - 如何修复倒计时时钟 JS HTML CSS
- angular - TypeError: Object(...) is not a function at Base64.encodeFile (vendor.js:)
- javascript - 如何使用鼠标滚轮同步两个滑块?
- node.js - 错误 node_modules/@types/node/globals.d.ts(196,5) errorTS2300: Duplicate identifier 'resolve' src/typings.d.ts(12,3) Duplicate identifier 'resolve'
- c++ - 函数返回值的位运算符提升
- scala - 异步处理 akka 流并写入文件接收器
- docker - 如何在运行 ASP.NET Core Web 应用程序之前更改 dockerfile 中的自定义入口点以将迁移应用到 sqlserver?
- spring-boot - Spring Boot数据JPA中的JSON数组问题