我有一个时序数据帧df
,如下所示:
id timestamp data Date sig events1 Start Peak gradient
timestamp
2020-01-15 06:12:49.213 40250 2020-01-15 06:12:49.213 20.0 2020-01-15 -1.0 0.0 NaN 1.0 0.000148
2020-01-15 06:12:49.313 40251 2020-01-15 06:12:49.313 19.5 2020-01-15 1.0 1.0 0.0 0.0 0.000294
2020-01-15 08:05:10.083 40256 2020-01-15 08:05:10.083 20.0 2020-01-15 1.0 0.0 1.0 0.0 0.000339
2020-01-15 08:05:10.183 40257 2020-01-15 08:05:10.183 20.5 2020-01-15 1.0 0.0 0.0 0.0 0.000334
2020-01-15 09:01:50.993 40310 2020-01-15 09:01:50.993 21.0 2020-01-15 1.0 0.0 0.0 0.0 0.000000
2020-01-15 09:01:51.093 40311 2020-01-15 09:01:51.093 21.5 2020-01-15 1.0 0.0 0.0 0.0 -0.008618
我想为每一Start==1
行找到直到下一Start==1
行的时间(以秒为单位),即从当前data
到达到的持续时间(data>=40
如果data
碰巧达到该时间)40
。如果data
从未达到40,则输出0
。有什么好方法吗?
生成了我自己的数据:
np.random.seed(0)
rng = pd.date_range('2015-02-25', periods=15, freq='T')
df = pd.DataFrame({ 'Timestamp': rng, 'data': [1,2,3,4,5,40,47,8,9,10,30,12,13,40,20], 'id':[0,1,0,0,0,0,0,1,0,0,0,0,1,0,0] })
df
使用ID基于ID群集进行分组
df['group'] = df['id'].cumsum().reindex()
df
选择每个组的开始到另一个数据框,df2
然后将“时间戳”重命名为“日期”
df2=df[df.id.eq(1) & df.id.shift(-1).eq(0)]
df2.drop(columns=['data','id'], inplace=True)
df2.rename(columns={'Timestamp':'Date'}, inplace=True)
合并新的数据框df2
与df
和裹胁追溯到日期时间
result = pd.merge(df, df2, on='group', how='outer')
result['Date']=pd.to_datetime(result['Date'])
result
遮盖所有实例 data==40
n =df['data']==40
应用掩码,计算之间的时间间隔start=1
时,data==40
如果它确实。谨慎选择,Date
因为我们已经完成了
result['x']=result.loc[n,'Timestamp']-result.loc[n,'Date']
result.drop(columns=['Date'],inplace=True)
result
输出量
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句