从特定d开始大Pandas的分食

2024-04-26 07:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着按日期分类。数据帧看起来像这样

        type     event_date
43851   MEDIUM 2017-10-09 13:28:33
43852     HIGH 2017-10-09 14:19:49
43853     HIGH 2017-10-09 14:23:25
43854     HIGH 2017-10-09 14:24:18
43855   MEDIUM 2017-10-09 14:25:31
43856      LOW 2017-10-09 14:25:33
43857   MEDIUM 2017-10-09 14:25:33
43858      LOW 2017-10-09 14:25:38

我想从一个特定的日期开始,每半小时统计一次。我试过了

^{pr2}$

这几乎就是我想要的

event_date           type
2017-10-09 13:00:00  MEDIUM      1
2017-10-09 14:00:00  HIGH        3
                     LOW         2
                     MEDIUM      2

我想

  1. 从指定的小时开始(在我的例子中,它将是LOW-12小时=02:25:33)的第一个出现,而不是第一个向下舍入的可用小时。在
  2. 同时显示空间隔

Tags: 数据eventdatetype分类空间例子low
1条回答
网友
1楼 · 发布于 2024-04-26 07:29:09

您可以使用pd.cut

starting_hour = (df[df.type=='LOW'].head(1).event_date - dt.timedelta(hours=12)).item()
intervals = pd.cut(df.event_date, pd.date_range(start=starting_hour , freq='30T', periods=49))

43851    (2017-10-09 13:25:33, 2017-10-09 13:55:33]
43852    (2017-10-09 13:55:33, 2017-10-09 14:25:33]
43853    (2017-10-09 13:55:33, 2017-10-09 14:25:33]
43854    (2017-10-09 13:55:33, 2017-10-09 14:25:33]
43855    (2017-10-09 13:55:33, 2017-10-09 14:25:33]
43856    (2017-10-09 13:55:33, 2017-10-09 14:25:33]
43857    (2017-10-09 13:55:33, 2017-10-09 14:25:33]
43858    (2017-10-09 14:25:33, 2017-10-09 14:55:33]

要只包含左值,可以

^{pr2}$

然后可以按间隔分组并使用count()

df.groupby(['i', 'type']).count()

请注意,您使用的是30分钟间隔,因此会有很多空行。

相关问题 更多 >