我正在处理库存数据。我有一组时间序列,如表所示。我想计算score_pos,score_Neg和score_Nut列。这些专栏的目的是找出score_pos的(正变化)*(最近15分钟的得分),score_neg的(负变化)*(最近15分钟的得分)和(中性变化)*(最近15分钟的得分)。 score_Nut。
例如:如果我们花费时间(12.15到12.30),我需要检查时间12.30,看看那个方向是正数还是负数或坚果。这意味着,如果方向是朝正方向或朝负或中立方向。在第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
答案 0 :(得分:0)
问题的说明或您粘贴的示例均存在问题,因为它们不一致。
这是我对您在课文中描述的建议。
已编辑:现在可以处理“方向”列中的NaN(忽略它们)。并在timestamp列中重复值。
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