簡體   English   中英

按時間序列數據中的條件查找時間段

[英]Find time segments by conditions in time series data

我有數據df

Timestamp = pd.date_range('2020-02-06 08:23:04', periods=1000, freq='s')
df = pd.DataFrame({'Timestamp': Timestamp,
                   'Data': 30+15*np.cos(np.linspace(0,10,Timestamp.size))})

df['timediff'] = (df['Timestamp'].shift(-1) - df['Timestamp']).dt.total_seconds()   
df['datadiff'] = df['Data'].shift(-1) - df['Data']
df['gradient'] = df['datadiff'] / df['timediff']

我想找到gradient > 0.13 的時間段。 因此, start是該范圍內的第一個數據點, end是該范圍內的最后一個數據點,對整個df執行此操作。

預期結果:

Start               Start_Data  End                 End_Data
2020-02-06 08:30:50 29.284407   2020-02-06 08:30:58 30.485252
                       ...  

以下是我將如何進行:

df['test'] = (df.gradient > 0.13).astype('int') 
# identifies changes in test condition
df["value_grp"] = (df.test.diff(1) != 0).astype("int").cumsum()

# Filter the groups with test condition being true and look at begin and end times
df.groupby('value_grp').filter(lambda x: (x.test==1).all()).Timestamp.min()
df.groupby('value_grp').filter(lambda x: (x.test==1).all()).Timestamp.max()

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM