首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按ID分组,然后找到每个新数据帧的时间增量?

如何按ID分组,然后找到每个新数据帧的时间增量?
EN

Stack Overflow用户
提问于 2021-06-07 04:33:30
回答 2查看 42关注 0票数 0

我正在尝试弄清楚如何获取我的时间序列数据帧,然后按特定列中的值进行分组,然后获取这些新的数据帧并找出最后一个和第一个时间戳之间的差异。我不知道这最终是否需要一个嵌套的groupby()。我使用python来实现这一点。

我会在这里解释。我有这个数据框架:

代码语言:javascript
运行
复制
        CityID                 Timestamp        Rainfall
---------------------------------------------------------
 0         222       2017-03-19 05:06:00               0
 1         222       2017-03-19 05:07:00               5
 2         222       2017-03-19 05:08:00               4
 3         222       2017-03-19 05:09:00               0
 4         222       2017-03-19 05:10:00               0
 5         222       2017-03-19 05:11:00               0
 6         222       2017-03-19 05:12:00               3
 7         222       2017-03-19 05:13:00               3
 8         222       2017-03-19 05:14:00               2
 9         222       2017-03-19 05:15:00               4
10         222       2017-03-19 05:16:00               0
11         222       2017-03-19 05:17:00               5
12         222       2017-03-19 05:18:00               4 
13         222       2017-03-19 05:19:00               4
14         222       2017-03-19 05:20:00               0
15         223       2017-03-19 05:09:00               0
16         223       2017-03-19 05:10:00               3
17         223       2017-03-19 05:11:00               2
18         223       2017-03-19 05:12:00               4
19         223       2017-03-19 05:15:00               0
20         223       2017-03-19 05:16:00               0
21         223       2017-03-19 05:17:00               3
22         223       2017-03-19 05:18:00               2
23         223       2017-03-19 05:19:00               3
24         223       2017-03-19 05:20:00               5
25         223       2017-03-19 05:21:00               4
26         223       2017-03-19 05:24:00               5
27         223       2017-03-19 05:27:00               3 
28         223       2017-03-19 05:28:00               2
29         223       2017-03-19 05:29:00               0

我想做的是为每个城市标识“风暴”,其中风暴在这里被标识为介于0之间的任何非零的“降雨量”值序列(以英寸为单位)。对于上下文,这意味着我们承认风暴开始于0降雨量,结束于0降雨量。如果在两者之间有一个0值,那么这将意味着两个独立的风暴。在这里,是的,一场风暴可以有最小的降雨量,并且只持续几分钟。我想按每个CityID分组,并生成以下数据帧:

代码语言:javascript
运行
复制
222
storm     duration
-------------------
0                1
1                4
2                3

223
storm     duration
-------------------
0                3
1               11

这些是我想要输出的数据帧。我将更详细地解释这一点。我所做的(或我想要做的)是获取我的原始数据帧,按CityID分组,然后识别每个风暴,并给它一个ID (例如0,1,2等)。然后,对于每个城市内的每个风暴,我想找出持续时间。因此,对于每个风暴,这意味着取最后一个时间戳并减去第一个时间戳,以生成每个风暴的时间增量(以分钟为单位)。这将包括CityID 223中的时间跳过,这说明缺少行。(为了在一开始根据降雨量描述风暴,我忽略了丢失的降雨量数据。为了找到每个风暴的总持续时间,我假设在缺少的行中存在非零降雨。)

目标是识别每个城市的所有风暴,并找到它们的持续时间。从这个输出数据帧中,我希望回答我的研究问题:“每个城市发生了多少风暴?”和“每个风暴有多长时间?”

我在尝试概念化如何做到这一点时遇到了很多麻烦,虽然我认为我需要使用嵌套的groupby,但构造代码本身确实让我感到困惑。在座有人知道怎么做吗?谢谢!

EN

Stack Overflow用户

发布于 2021-06-07 05:40:51

以防万一。下面是获取两个日期之间的增量的方法:

代码语言:javascript
运行
复制
import datetime as dt

def get_delta(d1, d2):
    date1 = dt.datetime.fromisoformat(d1)
    date2 = dt.datetime.fromisoformat(d2)
    return date2 - date1

date1 = "2017-03-19 05:06:00"
date2 = "2017-03-19 05:08:00"

delta = get_delta(date1, date2)

print(delta) # Output: 0:02:00
print(delta.seconds//60) # Output: 2 (minutes)
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67863504

复制
相关文章

相似问题

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