标签: rolling-average

具有可变宽度的滚动 30 天几何平均值

除了使用静态平均窗口宽度为 2 之外,@ShirinYavari对这个问题的解决方案几乎是我所需要的。我希望对给定样本的 30 天窗口内的所有样本进行平均,如果前面的样本在时间上更远或更近,则宽度可能会发生变化,例如,如果 1,您是否需要平均 2、3 或更多样本、2 个或更多之前的样本在给定样本的 30 天内。

这是一些示例数据,以及我的代码尝试:

RESULT = c(50,900,25,25,125,50,25,25,2000,25,25,
        25,25,25,25,25,25,325,25,300,475,25)
DATE = as.Date(c("2018-05-23","2018-06-05","2018-06-17",
                  "2018-08-20","2018-10-05","2016-05-22",
                  "2016-06-20","2016-07-25","2016-08-11",
                  "2017-07-21","2017-08-08","2017-09-18",
                  "2017-10-12","2011-04-19","2011-06-29",
                  "2011-08-24","2011-10-23","2012-06-28",
                  "2012-07-16","2012-08-14","2012-09-29",
                  "2012-10-24"))
FINAL_SITEID = c(rep("A", 5), rep("B", 8), rep("C", 9))
df=data.frame(FINAL_SITEID,DATE,RESULT)

data_roll <- df %>%
  group_by(FINAL_SITEID) %>%
  arrange(DATE) %>%
  mutate(day=DATE-dplyr::lag(DATE, n=1),
         day=replace_na(day, 1),
         rnk=cumsum(c(TRUE, day > 30))) %>%
  group_by(FINAL_SITEID, rnk) %>%
  mutate(count=rowid(rnk)) %>%
  mutate(GM30=rollapply(RESULT, width=count, geometric.mean, fill=RESULT, align="right"))
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息,这似乎应该很容易解决,但我无法弄清楚:

Error: Column `rnk` must be length 5 (the group size) or one, not 6
Run Code Online (Sandbox Code Playgroud)

r dplyr rolling-average

7
推荐指数
1
解决办法
229
查看次数

pandas.DataFrame.rolling不使用巨大的浮点数

当使用接近无穷大的浮点数时,我有一个大熊猫滚动的错误.我在这里显示一个例子:

import pandas as pd
series = pd.Series(1.,index = pd.date_range('2015-01-01', periods=6))
series[series.index[2]] = 1e19
series
2015-01-01    1.000000e+00
2015-01-02    1.000000e+00
2015-01-03    1.000000e+19
2015-01-04    1.000000e+00
2015-01-05    1.000000e+00
2015-01-06    1.000000e+00
Freq: D, dtype: float64
series.rolling('2D', closed = 'left').mean()
2015-01-01             NaN
2015-01-02    1.000000e+00
2015-01-03    1.000000e+00
2015-01-04    5.000000e+18
2015-01-05    5.000000e+18
2015-01-06    5.000000e-01
Freq: D, dtype: float64
Run Code Online (Sandbox Code Playgroud)

最后一点的答案应该是1!但它是0.5.为什么在使用大数字时滚动疯狂?相同的例子与较小的浮动:

series[series.index[2]] = 1e9
series.rolling('2D', closed = 'left').mean()
2015-01-01            NaN
2015-01-02            1.0
2015-01-03            1.0
2015-01-04    500000000.5
2015-01-05    500000000.5
2015-01-06            1.0
Freq: D, dtype: float64
Run Code Online (Sandbox Code Playgroud)

python time-series pandas rolling-average

6
推荐指数
1
解决办法
278
查看次数

列日期的1年滚动平均大熊猫

我想计算下面数据帧中每一行的1年滚动平均值

测试:

index   id      date        variation
2313    7034    2018-03-14  4.139148e-06
2314    7034    2018-03-13  4.953194e-07
2315    7034    2018-03-12  2.854749e-06
2316    7034    2018-03-09  3.907458e-06
2317    7034    2018-03-08  1.662412e-06
2318    7034    2018-03-07  1.346433e-06
2319    7034    2018-03-06  8.731700e-06
2320    7034    2018-03-05  7.145597e-06
2321    7034    2018-03-02  4.893283e-06
...
Run Code Online (Sandbox Code Playgroud)

例如,我需要计算:

  • 2018-03-14和2017-08-14之间的变化均值为7034
  • 2018-03-13和2017-08-13之间的变化均值为7034

  • 等等

我试过了:

test.groupby(['id','date'])['variation'].rolling(window=1,freq='Y',on='date').mean()
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误消息:

ValueError: invalid on specified as date, must be a column (if DataFrame) or None
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用pandas rolling()功能呢?

[编辑1]

谢谢Sacul

我测试过:

df['date'] = pd.to_datetime(df['date'])

df.set_index('date').groupby('id').rolling(window=1, freq='Y').mean()['variation']
Run Code Online (Sandbox Code Playgroud)

但是freq='Y'不起作用(我得到了:) ValueError: Invalid …

python pandas rolling-computation rolling-average

6
推荐指数
1
解决办法
2127
查看次数

pandas 滚动窗口意味着未来

我想pandas.DataFrame.rolling在具有日期时间的数据框上使用该方法来聚合未来值。看起来只能在过去完成,对吗?

python pandas rolling-average

6
推荐指数
1
解决办法
6292
查看次数

滚动时更改滚动窗口的大小

我有一个这样的熊猫数据框;

>df

leg    speed
  1       10
  1       11
  1       12
  1       13
  1       12
  1       15
  1       19
  1       12
  2       10
  2       10
  2       12
  2       15
  2       19
  2       11
  :        :
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列roll_speed,该列需要最近5个位置的滚动平均速度。但我想在其中添加更详细的条件。

  1. Groupby leg(它没有考虑到不同行中行的速度leg
  2. 我希望根据可用的行将滚动窗口从1个最大值更改为5个最大值。例如leg == 1,在第一行中,只有一行要计算,因此滚动速度应为10/1 = 10。对于第二行,只有两行可用于计算,轧制速度应为(10+11)/2 = 10.5

    leg    speed   roll_speed
      1       10           10    # 10/1
      1       11           10.5  # (10+11)/2
      1       12           11    # (10+11+12)/3
      1       13           11.5  # (10+11+12+13)/4
      1       12 …
    Run Code Online (Sandbox Code Playgroud)

python average pandas rolling-average

5
推荐指数
1
解决办法
507
查看次数

r根据值(不是行数或日期/时间变量)使用窗口计算滚动平均值

我对用于计算R中的滚动平均值的所有软件包都比较陌生,希望您能向我展示正确的方向。

我以以下数据为例:

ms <- c(300, 300, 300, 301, 303, 305, 305, 306, 308, 310, 310, 311, 312,
    314, 315, 315, 316, 316, 316, 317, 318, 320, 320, 321, 322, 324,
    328, 329, 330, 330, 330, 332, 332, 334, 334, 335, 335, 336, 336,
    337, 338, 338, 338, 340, 340, 341, 342, 342, 342, 342)
correct <- c(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,
         1, 1, 0, 0, …
Run Code Online (Sandbox Code Playgroud)

r filter smoothing rolling-computation rolling-average

5
推荐指数
1
解决办法
462
查看次数

熊猫的移动平均线

我有一个包含 3 列的 csv 文件,我想获得 1 列的移动平均值。我想用移动平均线创建一个新列。

import pandas as pd

df= pd.read_csv('csv',usecols=['speed','col2', 'col3'])
df['MA'] = df.rolling( window=5, on='speed').mean
print(df)
Run Code Online (Sandbox Code Playgroud)

它不再向我显示任何列。只有索引和...。

1   ...
2   ...
3   ...
3   ...
4   ...

[4 rows x 4 columns]
Run Code Online (Sandbox Code Playgroud)

如果我改为:

df= df.rolling(window=5, on='speed').mean
print(df)
Run Code Online (Sandbox Code Playgroud)

它只返回给我:

<bound method Rolling.mean of Rolling [window=5,center=False,axis=0,on=speed]>

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

python average pandas rolling-average

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

SQL/BIGQUERY 日期中存在间隙的运行平均值

我在 BigQuery/SQL 中的移动平均值方面遇到问题,我有表“SCORES”,我需要在使用用户对数据进行分组时制作 30 天的移动平均值,问题是我的日期不是连续的,例如存在间隙在里面。

下面是我当前的代码:

SELECT user, date,
      AVG(score) OVER (PARTITION BY user ORDER BY date)
FROM SCORES;
Run Code Online (Sandbox Code Playgroud)

我不知道如何将日期限制添加到该行中,或者这是否可能。

我当前的表如下所示,但当然有更多的用户:

user    date    score
AA  13/02/2018  2.00
AA  15/02/2018  3.00
AA  17/02/2018  4.00
AA  01/03/2018  5.00
AA  28/03/2018  6.00
Run Code Online (Sandbox Code Playgroud)

然后我需要它变成这样:

user    date    score   30D Avg
AA  13/02/2018  2.00    2.00
AA  15/02/2018  3.00    2.50
AA  17/02/2018  4.00    3.00
AA  01/03/2018  5.00    3.50
AA  28/03/2018  6.00    5.50
Run Code Online (Sandbox Code Playgroud)

在最后一行中,由于日期(向后最多 30D),它仅向后测量一个,有什么方法可以在 SQL 中实现这一点,还是我要求太多?

sql average moving-average google-bigquery rolling-average

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

Python - 尝试计算时间t之前的平均事件时间

这是一个示例数据集:

ID  Date
1   2/3/18
1   2/7/18
1   2/14/18
1   2/16/18
Run Code Online (Sandbox Code Playgroud)

以下是最终功能的外观:

ID  Date     Running_Mean
1   2/3/18   0
1   2/7/18   4
1   2/14/18  5.5
1   2/16/18  4.33
Run Code Online (Sandbox Code Playgroud)

这是一个滚动窗口,从序列的开头开始,并继续使用数据集进行扩展.

任何帮助将非常感激.

python pandas rolling-average

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

如何使用 Pandas Python 设置 5 分钟滚动平均窗口来重新采样数据

如何设置 5 分钟窗口大小以通过滚动平均值重新采样数据?我尝试了不同的方法,但总是收到有关 DateTimeIndex 的错误,即使我的数据的 Index 为 DateTimeIndex..

有谁知道正确的方法吗??

数据

                index   Speed   rolling_meanVal
DateTime            
1/1/2011 0:04   2165    0.057579    NaN
1/1/2011 0:07   3438    0.044646    NaN
1/1/2011 0:10   4713    0.043154    NaN
1/1/2011 0:13   6054    0.014403    NaN
1/1/2011 0:16   7385    0.038972    0.039751
1/1/2011 0:19   8734    0.019927    0.036447
1/1/2011 0:21   10045   0.039548    0.03689
1/1/2011 0:24   11374   0.089709    0.043492
1/1/2011 0:27   12661   0.102816    0.050084
1/1/2011 0:30   13960   0.119699    0.057045
1/1/2011 0:33   15261   0.095108    0.060505
1/1/2011 0:36   16579   0.051854    0.059784
1/1/2011 0:40   17848   0.035654    0.057928
1/1/2011 …
Run Code Online (Sandbox Code Playgroud)

python pandas rolling-average

0
推荐指数
1
解决办法
8606
查看次数