对于一个月的每一天(1-31),我想要计算该天任何60分钟内发生的出行次数,因此,第一个条目是0:00,我想要获取0:00到1:00的出行次数,第二个条目是0:01,我想要获得0:01到1:01的出行次数。
而且必须在同一天内,所以从23:00开始,您不需要计算出行次数
这个怎么做groupby呢?

发布于 2018-04-08 05:06:20
我将通过以下几个步骤完成此操作:
按拾取时间分组并计算每分钟发生了多少次行程(我假设您是基于拾取时间进行此操作),将此dataframe称为by_minute
by_minute本身(因此您有笛卡尔乘积),过滤到两个拾取时间按(“左侧”)拾取时间满足您的数据的行,并将“右侧”行程的计数相加为我相信您必须向by_minute添加一个虚拟列来促进连接。类似于:
by_minute['key'] = 1
joined = by_minute.merge(by_minute, on='key')还有一些this question提到的其他选项。merge有一个suffixes参数(默认情况下,用('_x', '_y')来区分列名。
发布于 2018-04-08 05:10:40
正如我在注释中所写的,据我所知,您正在寻找的不是groupby,而是每行上的某个操作。
我想出了使用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创建一个系列大小的布尔数组。
最后,我们对这个布尔数组求和(对于Numpy为np),这相当于计算满足上述条件的条目的数量。
https://stackoverflow.com/questions/49711719
复制相似问题