PUJ*_*UJA 6 python numpy pandas
我在pandas数据帧中有1分钟时间步数据.此数据不会连续记录,现在我想根据以下条件将所有数据拆分为单独的事件:如果连续数据记录5分钟或更长时间,则仅将其视为事件,并且对于此类事件数据需要单独提取.有没有办法在pandas数据帧中实现它.
我的数据看起来像这样(结果是Event列):
Date X Event
2017-06-06 01:08:00 0.019 1
2017-06-06 01:09:00 0.005 1
2017-06-06 01:10:00 0.03 1
2017-06-06 01:11:00 0.005 1
2017-06-06 01:12:00 0.003 1
2017-06-06 01:13:00 0.001 1
2017-06-06 01:14:00 0.039 1
2017-06-06 01:15:00 0.003 1
2017-06-06 01:17:00 0.001 nan
2017-06-06 01:25:00 0.006 nan
2017-06-06 01:26:00 0.006 nan
2017-06-06 01:27:00 0.032 nan
2017-06-06 01:29:00 0.013 2
2017-06-06 01:30:00 0.065 2
2017-06-06 01:31:00 0.013 2
2017-06-06 01:32:00 0.001 2
2017-06-06 01:33:00 0.02 2
2017-06-06 01:38:00 0.05 nan
2017-06-06 01:40:00 0.025 3
2017-06-06 01:41:00 0.01 3
2017-06-06 01:42:00 0.008 3
2017-06-06 01:43:00 0.009 3
2017-06-06 01:44:00 0.038 3
2017-06-06 01:45:00 0.038 3
Run Code Online (Sandbox Code Playgroud)
您的建议非常感谢.
使用nnnmmm提供的解决方案,结果如下所示
2015-01-01 03:24:00 NaN
2015-01-01 04:59:00 NaN
2015-01-01 05:01:00 NaN
2015-01-01 05:02:00 NaN
2015-01-01 05:03:00 NaN
2015-01-13 01:12:00 1.0
2015-01-13 01:13:00 1.0
2015-01-13 01:14:00 1.0
2015-01-13 01:15:00 1.0
2015-01-13 01:16:00 1.0
2015-01-13 01:49:00 1.0
2015-01-13 01:50:00 1.0
2015-01-13 01:51:00 1.0
2015-01-13 01:52:00 1.0
2015-01-13 01:53:00 1.0
2015-01-13 01:54:00 1.0
2015-01-13 01:55:00 1.0
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在01:16:00和01:49:00之间有时间变化,它不应该将其视为同一事件,而01:49:00应该是第二个事件.
这有点粗糙(并不是非常简洁),但你可以做类似下面的事情(你当然可以使它更简洁并省略中间变量,但我把它们放在这里以便更容易理解发生了什么).
df['new'] = (df.reset_index().Date.diff() == pd.Timedelta('1min')).astype(int).values
df['grp'] = (df.new != 1).cumsum()
df['cnt'] = df.groupby('grp')['new'].transform(size)
df['event'] = df['cnt'] > 4
df['Event'] = ((df.event) & (df.new != 1)).cumsum()
df['Event'] = np.where( df.event, df.Event, np.nan )
X new grp cnt event Event
Date
2017-06-06 01:08:00 0.019 0 1 8 True 1.0
2017-06-06 01:09:00 0.005 1 1 8 True 1.0
2017-06-06 01:10:00 0.030 1 1 8 True 1.0
2017-06-06 01:11:00 0.005 1 1 8 True 1.0
2017-06-06 01:12:00 0.003 1 1 8 True 1.0
2017-06-06 01:13:00 0.001 1 1 8 True 1.0
2017-06-06 01:14:00 0.039 1 1 8 True 1.0
2017-06-06 01:15:00 0.003 1 1 8 True 1.0
2017-06-06 01:17:00 0.001 0 2 1 False NaN
2017-06-06 01:25:00 0.006 0 3 3 False NaN
2017-06-06 01:26:00 0.006 1 3 3 False NaN
2017-06-06 01:27:00 0.032 1 3 3 False NaN
2017-06-06 01:29:00 0.013 0 4 5 True 2.0
2017-06-06 01:30:00 0.065 1 4 5 True 2.0
2017-06-06 01:31:00 0.013 1 4 5 True 2.0
2017-06-06 01:32:00 0.001 1 4 5 True 2.0
2017-06-06 01:33:00 0.020 1 4 5 True 2.0
2017-06-06 01:38:00 0.050 0 5 1 False NaN
2017-06-06 01:40:00 0.025 0 6 6 True 3.0
2017-06-06 01:41:00 0.010 1 6 6 True 3.0
2017-06-06 01:42:00 0.008 1 6 6 True 3.0
2017-06-06 01:43:00 0.009 1 6 6 True 3.0
2017-06-06 01:44:00 0.038 1 6 6 True 3.0
2017-06-06 01:45:00 0.038 1 6 6 True 3.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |