[英]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.