python - 在扩展数据帧上获得固定百分位数的更快方法
问题描述
目前我正在做以下事情,因为我需要跟踪扩展值集的特定百分位数。
我想知道是否有更优化的方法可以使用任何 numpy 矢量化技巧来做到这一点
import numpy as np
import pandas as pd
a=np.random.rand(1000)
df=pd.DataFrame(a,columns=['Data'])
val=25
df['25th_Perc']=df.expanding(min_periods=1).apply(lambda x:np.nanpercentile(x,val,interpolation='nearest'),raw=True)
解决方案
这不一定是 NumPy 技巧,而更像是 Pandas 技巧。
除了使用 apply 函数来应用 NumPy 的 percentile 函数,您还可以使用Pandas 的内置 percentile 函数。
df.Data.expanding(2).quantile(0.25, interpolation="nearest")
这可以节省您的代码提取 np 数组和使用apply
函数迭代的工作,而是直接应用您的转换。我怀疑在幕后,它的工作原理与您的示例相同,但没有我们直接调用它的开销。
这段代码可读性更强,速度也更快。在使用您的示例代码进行测试后,我看到了约 98% 的加速,但 YMMV。
推荐阅读
- r - 所有在 Shiny 中绘制 xray 分布的输出?
- functional-programming - Kotlin 中的元素算术运算
- node.js - 返回节点尝试捕获嵌套的异步错误
- javascript - 从十进制到十六进制
- php - 如何在php的YII框架中通过URL向控制器传递值?
- bash - awk 命令在 snakemake --use-singularity 中失败
- bitbucket - 用于 bitbucket 分支同步的 Rest API
- mysql - Mysql 3 表连接和更新
- ruby - Ruby on Rails 中的小数问题
- microsoft-graph-api - 使用 MSGraph 发布或修补 EducationClass 时出错