Python 根据函数结果按时间序列数据分组
我在分析电力系统的时间序列数据,我试图找到超过某个阈值的连续数据点 我目前正在使用excel公式逐行手动执行此操作,但当我尝试搜索更有效的方法时,我意识到这可以在python pandas groupby函数中完成 但是,就我所阅读的示例而言,groupby函数仅对具有相同标签的行进行分组。我想做的是将某个函数传递给groupby,该函数可以检查值=>3,然后对这些值进行分组,并根据其突破阈值=>3的开始和结束时间进行索引 输入:Python 根据函数结果按时间序列数据分组,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我在分析电力系统的时间序列数据,我试图找到超过某个阈值的连续数据点 我目前正在使用excel公式逐行手动执行此操作,但当我尝试搜索更有效的方法时,我意识到这可以在python pandas groupby函数中完成 但是,就我所阅读的示例而言,groupby函数仅对具有相同标签的行进行分组。我想做的是将某个函数传递给groupby,该函数可以检查值=>3,然后对这些值进行分组,并根据其突破阈值=>3的开始和结束时间进行索引 输入: +-------+---------+------+ | Ind
+-------+---------+------+
| 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 |
+-------+-----------+----------+--------+
- 创建一个小于
3
- 用于创建大于或等于
3
- 按掩码过滤
,然后按df
groupby
- 使用
一次传递多个函数agg
- 重命名列
哇,太谢谢你了!我不知道您使用了什么函数,比如cumsum和mask,这超出了我目前对python的了解。将深入研究这些问题。再次感谢你。
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