Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据函数结果按时间序列数据分组_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 根据函数结果按时间序列数据分组

Python 根据函数结果按时间序列数据分组,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我在分析电力系统的时间序列数据,我试图找到超过某个阈值的连续数据点 我目前正在使用excel公式逐行手动执行此操作,但当我尝试搜索更有效的方法时,我意识到这可以在python pandas groupby函数中完成 但是,就我所阅读的示例而言,groupby函数仅对具有相同标签的行进行分组。我想做的是将某个函数传递给groupby,该函数可以检查值=>3,然后对这些值进行分组,并根据其突破阈值=>3的开始和结束时间进行索引 输入: +-------+---------+------+ | Ind

我在分析电力系统的时间序列数据,我试图找到超过某个阈值的连续数据点

我目前正在使用excel公式逐行手动执行此操作,但当我尝试搜索更有效的方法时,我意识到这可以在python pandas groupby函数中完成

但是,就我所阅读的示例而言,groupby函数仅对具有相同标签的行进行分组。我想做的是将某个函数传递给groupby,该函数可以检查值=>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     |
+-------+-----------+----------+--------+
  • 创建一个小于
    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