滚动时间序列

时间:2019-03-27 08:28:24

标签: python-3.x pandas time-series

我正在处理库存数据。我有一组时间序列,如表所示。我想计算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         

1 个答案:

答案 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