python-3.x - 滚动时间序列
问题描述
我正在处理股票数据。我有一组时间序列,如表所示。我想计算列 score_pos、score_Neg 和 score_Nut。这些列背后的想法是找出 score_pos 的(正变化)*(过去 15 分钟的得分), score_neg 的(负变化)*(过去 15 分钟的得分)和(中性变化)*(过去 15 分钟的得分) score_Nut。
例如:如果我们花时间(12.15 到 12.30),我需要检查 12.30 的时间,看看那个方向是 Pos 或 Neg 还是 Nut。这意味着如果方向是正向或负向或中性。在第 16 行中,我们可以看到 score_Pos 为 5,因为此时方向为正,并且我正在计算直到此时的正数总数。这是目标。接下来我为每一行做。对于这一行,我将检查这一行的前 15 分钟,即 (3:17)。
我尝试了以下代码来计算这些列。
co=df.Direction[df.Direction=='Pos'].dropna()
for c in co:
df[c] = df['Direction'].eq(c).rolling('15min').sum()
df.loc[:df.index[0] + pd.Timedelta(15*60, unit="s"), cols] = np.nan
此代码无法按预期工作。我不确定如何以更好的方式计算它。
row Timestamp Direction score score_pos score_Neg score_Nut
1 1/20/19 12:15
2 1/20/19 12:17 Pos 564.8
3 1/20/19 12:17 Nut
4 1/20/19 12:18 Neg -4.7
5 1/20/19 12:19 Neg -17.3
6 1/20/19 12:20 Pos 4.9
7 1/20/19 12:21 Neg -0.02
8 1/20/19 12:22 Neg -3.50
9 1/20/19 12:23 Pos 62.43
10 1/20/19 12:24 Neg -4.6
11 1/20/19 12:25 Pos 2.8
12 1/20/19 12:26 Neg 3.4
13 1/20/19 12:27 Neg -0.7
14 1/20/19 12:29 Neg 8.07
15 1/20/19 12:29 Neg -0.73 -19.8
16 1/20/19 12:30 Nut 0 0
17 1/20/19 12:31 Pos -2.6 67.52
18 1/20/19 12:32 Neg -0.2 -20.0
19 1/20/19 12:33 Pos 5.2 72.76
解决方案
您的问题的解释或您粘贴的示例存在问题,因为它们不连贯。
这是我对您在文本中描述的内容的建议。
编辑:这现在处理方向列中的 NaN(它忽略它们)。并在时间戳列中重复值。
df = df.set_index('Timestamp')
for state in df['Direction'].dropna().unique():
df.loc[df['Direction'] == state, 'score_' + state] = df.loc[df['Direction'] == state,'score'].fillna(0).rolling('15T').sum()
new_columns = 'score_' + df['Direction'].dropna().unique()
df.loc[:df.index[0] + pd.DateOffset(minutes=14), new_columns] = np.nan
推荐阅读
- php - 从日光开始之前保存的偏移量获取当前时区偏移量
- python - Python tkinter 包无法正常运行
- sharepoint - 如何在 Pega 的共享点中创建文件夹时设置元数据(cmis:名称和 cmis:描述)
- laravel - Vue JS 和 Laravel 在同一台服务器上但端口不同(SSL 问题)
- vb.net - ping很多IP
- pingfederate - PingFederate 健康检查自动化
- mongodb - 当我们知道位置时,在猫鼬中更新二维数组
- php - A Database Error Occurred Error Number: 1062 Duplicate entry '5' for key 'PRIMARY'
- javascript - 从具有动态内容的 vuejs 中的方法打开模式
- nginx - 如何根据动态 url 参数配置 nginx proxy_pass?