我正在分析电力系统时间序列数据,我试图找到超出某个阈值的连续数据点。
我目前正在手动逐行使用excel公式来执行此操作,但我正在尝试搜索更有效的方法,我意识到这可以在python pandas groupby函数中完成。
但是,就我已阅读的示例而言,groupby函数仅在行具有相同标签时才对其进行分组。我想要做的是将某个函数传递给groupby,它可以检查value => 3,然后对这些值进行分组,通过其开始和结束时间突破阈值=>进行索引。 3。
输入:
+-------+---------+------+
| Index | Time | Value|
+-------+---------+------+
| 0 | 00:00:01| 3 |
| 1 | 00:00:02| 4 |
| 2 | 00:00:03| 5 |
| 3 | 00:00:04| 2 |
| 4 | 00:00:05| 6 |
| 5 | 00:00:06| 7 |
| 6 | 00:00:07| 1 |
| 7 | 00:00:08| 9 |
+-------+---------+------+
输出:
+-------+-----------+----------+--------+
| Index | TimeStart | TimeEnd | Value |
+-------+-----------+----------+--------+
| 0 | 00:00:01 | 00:00:03 | 3,4,5 |
| 1 | 00:00:05 | 00:00:06 | 6,7 |
| 2 | 00:00:08 | 00:00:08 | 9 |
+-------+-----------+----------+--------+
答案 0 :(得分:3)
3
3
df
,然后groupby
agg
一次传递多个功能mask = df.Value.lt(3)
grp = mask.cumsum()
d1 = df[~mask].groupby(grp[~mask]).agg(dict(
Time=['first', 'last'],
Value=lambda x: ','.join(map(str, x))
))
d1.columns = ['TimeStart', 'TimeEnd', 'Value']
d1
TimeStart TimeEnd Value
Value
0 00:00:01 00:00:03 3,4,5
1 00:00:05 00:00:06 6,7
2 00:00:08 00:00:08 9