首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫按功能结果按时间序列数据分组

熊猫按功能结果按时间序列数据分组
EN

Stack Overflow用户
提问于 2017-10-29 00:46:56
回答 1查看 143关注 0票数 3

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

我目前正在手动使用excel公式,但当我试图搜索更有效的方法时,我意识到这可以在python大熊猫群比函数中完成。

但是,就我所读的示例而言,groupby函数只对具有相同标签的行进行分组。我想要做的是将一个特定的函数传递给groupby,这个函数可以检查=> 3值是否为=> 3,然后对这些值进行分组,并根据其违反阈值=>3的起始时间和结束时间对其进行索引。

输入:

代码语言:javascript
运行
复制
+-------+---------+------+
| 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  |
+-------+---------+------+

输出:

代码语言:javascript
运行
复制
+-------+-----------+----------+--------+
| 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     |
+-------+-----------+----------+--------+
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-29 00:55:56

  • 创建一个小于3的掩码
  • 创建大于或等于3的组的累积和
  • 通过掩码过滤df,然后使用groupby
  • 使用agg一次传递多个函数
  • 重命名列
代码语言:javascript
运行
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46995864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档