2017-08-11 72 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

相關問題