对于每月的每一天(1-31),我想计算当天任何60分钟内发生的行程次数,因此第一个条目是0:00,我想得到的数量从0:00到1:00旅行,第二次是0:01,我想从0:01到1:01获得旅行次数。
并且必须在同一天内,所以从23:00起,您不需要计算旅行次数
如何对此进行分组?
答案 0 :(得分:0)
我会通过几个步骤完成此操作:
by_minute
by_minute
(因此您拥有笛卡尔积)并过滤到两个拾取时间满足条件的行我相信你必须在by_minute
添加一个虚拟列以方便连接。类似的东西:
by_minute['key'] = 1
joined = by_minute.merge(by_minute, on='key')
还提到了其他一些选项this question。 merge
有一个suffixes
参数(默认情况下它是('_x', '_y')
,可以区分列名。
答案 1 :(得分:0)
正如我在评论中写到的那样,据我所知,你不是在寻找一个组合,而是在每一行上进行一些操作。
我使用apply提出了以下解决方案:
s = pd.to_datetime(df["pickup_datetime"]) # make sure the pickup column is datetime
r = s.apply(lambda x: np.sum(s.between(x, x + pd.Timedelta("1hr")) & (s.dt.dayofyear == x.dayofyear)))
让我们分解:
这将遍历每一行(apply
)并根据两个条件创建一个布尔掩码:
然后我们将它们与AND操作(&)结合起来
这样就可以在满足两个条件的地方创建一个与True
系列相同的布尔数组
最后,我们总结(np
为Numpy)这个布尔数组,相当于计算满足上述条件的条目数。