我正在使用5分钟柱线和收盘价的熊猫数据框。我想针对不同时间范围计算滚动EMA。要执行5分钟的ema,这可行:df['close'].ewm(span=10, adjust=False).mean()
但是,滚动20分钟EMA跨度10似乎非常困难。我需要将每分钟分为20分钟,例如9:30、9:50、10:10 ...,然后9:35、9:55、10:15 ...,然后计算此子集上的EMA,最后合并回去。由于这些都是5分钟的小节,因此需要做12个子集。
以另一种方式说,我想在非连续行上计算滚动EMA。使用索引而不是日期,我想要的是EMA,行0,4,8,12 ... 76,然后是行1,5,9,13 ... 77,依此类推。
有更简单的方法吗?
数据框在下面,很抱歉,我无法将其转换为剪切并粘贴到控制台的格式。 json.dumps()说时间戳不能JSON可序列化。
谢谢。
date close
0 2019-08-21 09:30:00 292.26
1 2019-08-21 09:35:00 292.31
2 2019-08-21 09:40:00 292.77
3 2019-08-21 09:45:00 292.6
4 2019-08-21 09:50:00 292.63
5 2019-08-21 09:55:00 292.53
6 2019-08-21 10:00:00 292.48
7 2019-08-21 10:05:00 292.34
8 2019-08-21 10:10:00 292.18
9 2019-08-21 10:15:00 292.38
10 2019-08-21 10:20:00 292.4
11 2019-08-21 10:25:00 292.33
12 2019-08-21 10:30:00 292.19
13 2019-08-21 10:35:00 292.06
14 2019-08-21 10:40:00 292.04
15 2019-08-21 10:45:00 292.18
16 2019-08-21 10:50:00 292.32
17 2019-08-21 10:55:00 292.3
18 2019-08-21 11:00:00 292.28
19 2019-08-21 11:05:00 292.57
20 2019-08-21 11:10:00 292.55
21 2019-08-21 11:15:00 292.47
22 2019-08-21 11:20:00 292.47
23 2019-08-21 11:25:00 292.49
24 2019-08-21 11:30:00 292.63
25 2019-08-21 11:35:00 292.76
26 2019-08-21 11:40:00 292.72
27 2019-08-21 11:45:00 292.59
28 2019-08-21 11:50:00 292.55
29 2019-08-21 11:55:00 292.75
30 2019-08-21 12:00:00 292.63
31 2019-08-21 12:05:00 292.57
32 2019-08-21 12:10:00 292.64
33 2019-08-21 12:15:00 292.52
34 2019-08-21 12:20:00 292.43
35 2019-08-21 12:25:00 292.46
36 2019-08-21 12:30:00 292.46
37 2019-08-21 12:35:00 292.46
38 2019-08-21 12:40:00 292.47
39 2019-08-21 12:45:00 292.5
40 2019-08-21 12:50:00 292.64
41 2019-08-21 12:55:00 292.59
42 2019-08-21 13:00:00 292.63
43 2019-08-21 13:05:00 292.64
44 2019-08-21 13:10:00 292.59
45 2019-08-21 13:15:00 292.61
46 2019-08-21 13:20:00 292.61
47 2019-08-21 13:25:00 292.54
48 2019-08-21 13:30:00 292.43
49 2019-08-21 13:35:00 292.48
50 2019-08-21 13:40:00 292.42
51 2019-08-21 13:45:00 292.46
52 2019-08-21 13:50:00 292.4
53 2019-08-21 13:55:00 292.32
54 2019-08-21 14:00:00 292.47
55 2019-08-21 14:05:00 292.37
56 2019-08-21 14:10:00 292.26
57 2019-08-21 14:15:00 292.57
58 2019-08-21 14:20:00 292.45
59 2019-08-21 14:25:00 292.58
60 2019-08-21 14:30:00 292.37
61 2019-08-21 14:35:00 292.05
62 2019-08-21 14:40:00 292.15
63 2019-08-21 14:45:00 291.88
64 2019-08-21 14:50:00 291.89
65 2019-08-21 14:55:00 292.0
66 2019-08-21 15:00:00 291.96
67 2019-08-21 15:05:00 292.15
68 2019-08-21 15:10:00 292.14
69 2019-08-21 15:15:00 292.28
70 2019-08-21 15:20:00 292.23
71 2019-08-21 15:25:00 292.25
72 2019-08-21 15:30:00 292.39
73 2019-08-21 15:35:00 292.36
74 2019-08-21 15:40:00 292.35
75 2019-08-21 15:45:00 292.27
76 2019-08-21 15:50:00 292.38
77 2019-08-21 15:55:00 292.43
答案 0 :(得分:0)
定义一个分组密钥,然后定义df.groupby(key).rolling()。mean()
例如每4行的滚动平均值
df['mod_4'] = df.index % 4
df['rolling_mean_4'] df.groupby(['mod_4']).mean()
另请参阅https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html