除了使用静态平均窗口宽度为 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) 当使用接近无穷大的浮点数时,我有一个大熊猫滚动的错误.我在这里显示一个例子:
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) 我想计算下面数据帧中每一行的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-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 …
我想pandas.DataFrame.rolling在具有日期时间的数据框上使用该方法来聚合未来值。看起来只能在过去完成,对吗?
我有一个这样的熊猫数据框;
>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个位置的滚动平均速度。但我想在其中添加更详细的条件。
leg(它没有考虑到不同行中行的速度leg。我希望根据可用的行将滚动窗口从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)我对用于计算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) 我有一个包含 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) 我在 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 中实现这一点,还是我要求太多?
这是一个示例数据集:
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)
这是一个滚动窗口,从序列的开头开始,并继续使用数据集进行扩展.
任何帮助将非常感激.
如何设置 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) rolling-average ×10
pandas ×7
python ×7
average ×3
r ×2
dplyr ×1
filter ×1
smoothing ×1
sql ×1
time-series ×1