首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas高级条件分组

pandas高级条件分组
EN

Stack Overflow用户
提问于 2018-04-08 04:33:37
回答 2查看 161关注 0票数 0

对于一个月的每一天(1-31),我想要计算该天任何60分钟内发生的出行次数,因此,第一个条目是0:00,我想要获取0:00到1:00的出行次数,第二个条目是0:01,我想要获得0:01到1:01的出行次数。

而且必须在同一天内,所以从23:00开始,您不需要计算出行次数

这个怎么做groupby呢?

EN

回答 2

Stack Overflow用户

发布于 2018-04-08 05:06:20

我将通过以下几个步骤完成此操作:

按拾取时间分组并计算每分钟发生了多少次行程(我假设您是基于拾取时间进行此操作),将此dataframe称为by_minute

  • cross
  • by_minute本身(因此您有笛卡尔乘积),过滤到两个拾取时间按(“左侧”)拾取时间满足您的数据的行,并将“右侧”行程的计数相加为

我相信您必须向by_minute添加一个虚拟列来促进连接。类似于:

代码语言:javascript
复制
by_minute['key'] = 1
joined = by_minute.merge(by_minute, on='key')

还有一些this question提到的其他选项。merge有一个suffixes参数(默认情况下,用('_x', '_y')来区分列名。

票数 0
EN

Stack Overflow用户

发布于 2018-04-08 05:10:40

正如我在注释中所写的,据我所知,您正在寻找的不是groupby,而是每行上的某个操作。

我想出了使用apply的以下解决方案:

代码语言:javascript
复制
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),这相当于计算满足上述条件的条目的数量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49711719

复制
相关文章

相似问题

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