在给定的时间段内按天计算

示例数据框:


    id           start1        end1      start2        end2

0  Bob       2018-11-29  2018-11-30  2018-12-01  2018-12-31

1  James     2018-10-19  2018-10-31         NaT         NaT

2  Jane      2018-04-05  2018-07-12  2018-11-29  2018-11-30

鉴于上述示例数据框,我想按月和年显示频率计数。让我们假设在这些时期,每个人 ( id) 都受到某种事物的“影响”。每个人最多有两个时间段(总是至少有一个时间段(即start1和end1),但可能有也可能没有第二个时间段(即,start2和end2))。我想显示在任何人受到影响的整个时间范围内,有多少人受到月和年的影响。


例如,上面的数据会产生这样的结果(不确定年-月是同一列还是多列——不管什么都行):


   year-month  count

0     2018-04      1

1     2018-05      1

2     2018-06      1

3     2018-07      1

4     2018-08      0

5     2018-09      0

6     2018-10      1

7     2018-11      2

8     2018-12      1

我的最终目标是跨不同时间段(例如,年(在本示例数据中均为 2018 年)、月/年、周等)查看这些数据。


我不知道如何将这些解包成一个系列,以便我可以在单列上绘制直方图。我知道一旦我将它们放在一个列中(例如,date),我可以执行以下操作:


df.groupby(df["date"].dt.month).count().plot(kind="bar")

但这只能按月计算,并且假设我已经将日期放在一列中。


datetime如果在每个时间范围之间,我可以使用并继续在循环中添加天数,直到我到达结束日期,但是每次我做类似的事情时,我都知道 pandas/numpy 有更好的方法。我正在寻找更好的方法。


慕森王
浏览 156回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python