标签: rolling-computation

如何计算numpy中一维数组的移动(或滚动,如果你愿意的话)百分位数/分位数?

在熊猫中,我们有pd.rolling_quantile(). 在 numpy 中,我们有np.percentile(),但我不确定如何进行滚动/移动版本。

解释我所说的移动/滚动百分位数/分位数是什么意思:

给定数组[1, 5, 7, 2, 4, 6, 9, 3, 8, 10]0.5窗口大小为 3的移动分位数(即移动百分位数 50%)为:

1
5 - 1 5 7 -> 0.5 quantile = 5
7 - 5 7 2 ->                5
2 - 7 2 4 ->                4
4 - 2 4 6 ->                4
6 - 4 6 9 ->                6
9 - 6 9 3 ->                6
3 - 9 3 8 ->                8
8 - …
Run Code Online (Sandbox Code Playgroud)

numpy quantile pandas rolling-computation

3
推荐指数
1
解决办法
5990
查看次数

滚动百分比沿列添加

我认为这在基础R中应该很容易,但我无法弄明白.我有一个简单的数据框,让我们说它看起来像这样

tbl <-  read.table(text = 
    "Field1 Field2
    100 200
    150 180
    200 160
    280 250
    300 300
    300 250",
header = TRUE)
Run Code Online (Sandbox Code Playgroud)

现在,我想要做的是创建一个将应用滚动%添加的函数,例如:

fn <- function(tbl, pct) {}
Run Code Online (Sandbox Code Playgroud)

它接受上面的数据帧为tbl.它将当前行的百分比部分添加到基于NEXT的行pct,并且几乎以累积方式滚动它.

例如,fn(tbl$Field1, 0.1)会生成以下结果:

100   (100 + 0.1*0)
160   (150 + 0.1*100 = 160)
216   (200 + 0.1*160 = 216)
301.6 (280 + 0.1*216 = 301.6)
Run Code Online (Sandbox Code Playgroud)

等等

我会使用一个包解决方案,但更喜欢基础R,因为它有助于学习过程!我的长期目标是通过field和pct的每个组合构建一个循环,这样我就可以在回归模型中测试它的效果; 因此,我的直觉是,我后来可以应用的功能是前进的方向.

谢谢.

r apply rolling-computation

3
推荐指数
1
解决办法
80
查看次数

在R中创建滚动列表

给定一个向量(数据框的列),我想创建一个滚动向量.

l = 0:10
Run Code Online (Sandbox Code Playgroud)

会返回,(窗口为3):

[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5] ...
Run Code Online (Sandbox Code Playgroud)

r rolling-computation

3
推荐指数
1
解决办法
114
查看次数

可以处理重复的不规则时间序列的滚动窗口函数

我有以下 data.frame:

    grp  nr   yr
 1:   A 1.0 2009
 2:   A 2.0 2009
 3:   A 1.5 2009
 4:   A 1.0 2010
 5:   B 3.0 2009
 6:   B 2.0 2010
 7:   B  NA 2011
 8:   C 3.0 2014
 9:   C 3.0 2019
10:   C 3.0 2020
11:   C 4.0 2021
Run Code Online (Sandbox Code Playgroud)

期望的输出:

   grp  nr   yr nr_roll_period_3
1    A 1.0 2009               NA
2    A 2.0 2009               NA
3    A 1.5 2009               NA
4    A 1.0 2010               NA
5    B 3.0 2009               NA
6 …
Run Code Online (Sandbox Code Playgroud)

r date time-series rolling-computation

3
推荐指数
1
解决办法
264
查看次数

熊猫:滚动第二大价值

我需要获得 df 的滚动第二大值。

为了获得最大的价值我所做的

max = df.sort_index(ascending=True).rolling(10).max()
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,python 抛出一个错误

max = df.sort_index(ascending=True).rolling(10).nlargest(2)

AttributeError: 'Rolling' object has no attribute 'nlargest'
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?我还能使用什么高性能的东西?

python pandas rolling-computation

3
推荐指数
1
解决办法
1700
查看次数

带有 groupby 和条件的 Pandas 滚动总和

我有一个数据框,其中包含具有客户分析的不同商品的销售时间序列。对于每个项目和给定的一天,我想计算:

  • 过去 2 天总销售额中我最好的客户的份额
  • 过去 2 天总销售额中我的顶级客户(来自列表)的份额

我试过这里提供的解决方案:

可以通过以下方式生成示例数据帧:

import pandas as pd
from datetime import timedelta

df_1 = pd.DataFrame()
df_2 = pd.DataFrame()
df_3 = pd.DataFrame()

# Create datetimes and data
df_1['item'] = [1, 1, 1, 2, 2, 2, 2]
df_1['date'] = pd.date_range('1/1/2018', periods=7, freq='D')
df_1['customer'] = ['a', 'b', 'c', 'a', 'b', 'b', 'c']
df_1['sales'] = [2, 4, 1, 5, 7, 2, 3]

df_2['item'] = [1, 1, 1, 2, 2, 2, 2]
df_2['date'] = …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas rolling-computation

3
推荐指数
1
解决办法
2323
查看次数

数据帧中固定时间窗口的滚动平均值

我有一个像这样的数据框:

import pandas as pd

df = pd.DataFrame({'ID': [1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3],
                   'val': [1,2,3,1,2,3,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3],
                   'time': [pd.Timestamp(2017, 1, 1, 12), pd.Timestamp(2017, 1, 1, 13), pd.Timestamp(2017, 1, 1, 14), pd.Timestamp(2017, 1, 2, 16), pd.Timestamp(2017, 1, 2, 17), pd.Timestamp(2017, 1, 2, 18), pd.Timestamp(2017, 1, 1, 12), pd.Timestamp(2017, 1, 1, 13), pd.Timestamp(2017, 1, 1, 14), pd.Timestamp(2017, 1, 1, 15), pd.Timestamp(2017, 1, 1, 16), pd.Timestamp(2017, 1, 2, 15), pd.Timestamp(2017, 1, 1, 12), pd.Timestamp(2017, 1, 1, 13), pd.Timestamp(2017, 1, 1, 14), pd.Timestamp(2017, 1, 1, 15), pd.Timestamp(2017, 1, 1, 16), …
Run Code Online (Sandbox Code Playgroud)

python datetime pandas rolling-computation

3
推荐指数
1
解决办法
95
查看次数

R:递归添加行

j 个表面接触后手部细菌的浓度可以由以下递归关系决定:

H[j+1]=H[j]+T[j]*(S[j]-H[j])
Run Code Online (Sandbox Code Playgroud)

S手触摸的表面浓度在哪里(为了方便,假设是随机的)。T是每个接触的传输效率。我想计算最终的手部浓度(起始浓度为零)。

我有一个数据框,它有一个表面接触向量和每个表面的传输效率。我有两个组a&b并且在每个组中假设我将依次触摸每个组1:length(df)

 df <- data.frame(S = runif(10)*100, T = runif(10),g=rep(c("a","b"),each=5))
Run Code Online (Sandbox Code Playgroud)

我想在可能的情况下计算H按组计算的累积总和dplyr

一个特例:

如果g = "a", 的起始值H0。如果g=="b"那么的起始值H是从何时开始的最后一个值g=="a"

r accumulate dplyr rolling-computation purrr

3
推荐指数
2
解决办法
167
查看次数

kdb的移动最大函数mmax的复杂度是O(n)吗?

我使用函数mmax来计算一千万长度整数向量的移动最大值。我运行了 10 次来计算总执行时间。窗口大小 132 的运行时间(15,025 毫秒)是窗口大小 22 的运行时间(2,425 毫秒)的 6 倍。看起来复杂度mmax是 O(nw) 而不是 O(n),其中 w 是滑动窗口的长度)。

\n

为了检查其他类似产品是否也是如此,我在 DolphinDB 上尝试了相同的实验,DolphinDB 是一个具有内置分析功能的时间序列数据库 ( https://www.dolphindb.com/downloads.html )。相比之下,DolphinDB\xe2\x80\x99smmax线性复杂度为 O(n),无论窗口大小如何:1,277 毫秒(窗口大小 132)和 1,233 毫秒(窗口大小 22)。

\n

本实验使用的硬件:

\n
Server: Dell PowerEdge R630\nArchitecure: x86_64\nCPU Model Name: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz\nTotal logical CPU cores: 48\nTotal memory: 256G\n
Run Code Online (Sandbox Code Playgroud)\n

实验设置

\n

我使用的是KDB+ 4.0 64位版本和DolphinDB_Linux_V2.00.7(DolphinDB社区版本:2核和8GB内存)。两个实验均使用 2 核 CPU 进行。

\n

韩国开发银行实施

\n
// Start the server\nrlwrap -r taskset -c 0,1 …
Run Code Online (Sandbox Code Playgroud)

sliding-window kdb rolling-computation dolphindb

3
推荐指数
1
解决办法
158
查看次数

在mysql中创建一段时间的ROLLING总和

我有一个列date和列表time_spent.我想为每个日期D找到一段时间内'time_spent'值的总和:(D-7-D),即.过去一周+当天.

我无法找到一种方法来做到这一点,因为我只能找到总和的例子而不是可变时间段的总和.

这是一个数据集示例:

CREATE TABLE rolling_total
(
  date date,
  time_spent int
);

INSERT INTO rolling_total VALUES ('2013-09-01','2'),
('2013-09-02','1'),
('2013-09-03','3'),
('2013-09-04','4'),
('2013-09-05','2'),
('2013-09-06','5'),
('2013-09-07','3'),
('2013-09-08','2'),
('2013-09-09','1'),
('2013-09-10','1'),
('2013-09-11','1'),
('2013-09-12','3'),
('2013-09-13','2'),
('2013-09-14','4'),
('2013-09-15','6'),
('2013-09-16','1'),
('2013-09-17','2'),
('2013-09-18','3'),
('2013-09-19','4'),
('2013-09-20','1'),
('2013-09-21','6'),
('2013-09-22','5'),
('2013-09-23','3'),
('2013-09-24','1'),
('2013-09-25','5'),
('2013-09-26','2'),
('2013-09-27','1'),
('2013-09-28','4'),
('2013-09-29','3'),
('2013-09-30','2')
Run Code Online (Sandbox Code Playgroud)

结果如下:

date       | time_spent   | rolling_week_total
2013-09-01 |           2  |         2
2013-09-02 |           1  |         3
2013-09-03 |           3  |         6
2013-09-04 |           4  |        10
2013-09-05 |           2  | …
Run Code Online (Sandbox Code Playgroud)

mysql sql sum query-optimization rolling-computation

2
推荐指数
1
解决办法
5828
查看次数