【发布时间】:2019-08-17 18:05:57
【问题描述】:
我正在处理股票数据。我有一组时间序列,如表所示。我想计算列 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
【问题讨论】:
-
您的代码看起来不错,只有 2 个 cmets:我认为第一行应该是 c=df['Direction'].unique()。而且您仍然缺少应该很容易在最后添加的(等于方向条件)。如果您添加一些我们可以运行来测试它的示例数据,会更容易提供帮助。
-
@ecortazar 请检查一下,我已经更新了更多示例数据,这正是我所需要的。列上的预期值是必需的。
标签: python-3.x pandas time-series