2017-08-11 76 views
1

我不做很多时间序列工作,我知道我对这种解决方案的想法是次优的。希望获得有关解决此问题最有效方法的意见。确定时间序列数据的更新值Python Pandas

我有几天的值,每天有多个值通过时间戳标识。

数据看起来像这样:

Index  Period  Value   Timestamp 
    0   1   73   2017-08-10 16:44:23 
    1   1   73   2017-08-09 16:30:12 
    2   1   73   2017-08-08 16:40:31 
    3   2   50   2017-08-10 16:44:23 
    4   2   45   2017-08-09 16:30:12 
    5   2   45   2017-08-08 16:40:31 
    6   3   13   2017-08-10 16:44:23 
    7   3   13   2017-08-09 16:30:12 
    8   3   13   2017-08-08 16:40:31 

该示例示出了用于连续捕捉3天三个不同时期的一个数据元素。这个想法是确定任何测量期间(期间1,2或3)的值是否改变。

正如您在示例中所看到的那样,第三天(2017-08-10)更新了期间2的值。我想要检测改变后的值。

我能弄清楚如何做比较的唯一方法就是循环,通过这个循环我认为既不雅,效率低下,也绝对不是Pythonic。

任何人都有洞察到没有循环/迭代的方法?

在此先感谢。

编辑

预计产量将是一个DF如下如果在最近的时间戳数据的数值变化:

Index  Period  Value   Timestamp 
    0   1   73   2017-08-10 16:44:23 
    3   2   50   2017-08-10 16:44:23 
    6   3   13   2017-08-10 16:44:23 
+0

您能否提供预期的输出? – Deena

+0

请参阅编辑。谢谢 – Windstorm1981

回答

1

首先,你可以认同这样的改变行:

df['diff'] = df.groupby('Period')['Value'].diff(-1).fillna(0) 

    Period Value   Timestamp diff 
0  1  73 2017-08-10 16:44:23 0.0 
1  1  73 2017-08-09 16:30:12 0.0 
2  1  73 2017-08-08 16:40:31 0.0 
3  2  50 2017-08-10 16:44:23 5.0 
4  2  45 2017-08-09 16:30:12 0.0 
5  2  45 2017-08-08 16:40:31 0.0 
6  3  13 2017-08-10 16:44:23 0.0 
7  3  13 2017-08-09 16:30:12 0.0 
8  3  13 2017-08-08 16:40:31 0.0 

然后,选择的行,以显示(具有相同的时间戳作为一排的改变所有行):

lst = df[ df['diff'] != 0. ]['Timestamp'].tolist() 
df[ df['Timestamp'].isin(lst) ] 

    Period Value   Timestamp diff 
0  1  73 2017-08-10 16:44:23 0.0 
3  2  50 2017-08-10 16:44:23 5.0 
6  3  13 2017-08-10 16:44:23 0.0 
+0

是的。想要3排。 – Windstorm1981

+0

@ Windstorm1981好吧,我编辑过。我想我现在明白了 – JohnE