前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python数据处理,pandas 统计连续停车时长

Python数据处理,pandas 统计连续停车时长

作者头像
咋咋
发布2021-09-01 12:13:51
1.3K0
发布2021-09-01 12:13:51
举报
文章被收录于专栏:数据大宇宙

定期找些简单练习作为 pandas 专栏的练习题

知识点

  1. DataFrame.apply 以及 axis 的理解
  2. 分组计数
  3. DataFrame.iloc 切片

如下一份停车场数据:

  • 每行表示某时间段(总是1个小时)每个停车位停放是那辆车(内容视为车牌吧)

需要以下结果:

共2个需求:

需求1:停车次数(蓝色行):一天中,每个停车位分别有多少不同的车停放,如下:

  • 分别有8量不同车牌,因此这个停车位的"停车次数"是8
  • 就算同一天有相同的车在不同时段停放,只算一次

需求2:连续停车小时(白色行):由于有些车是停放多于1小时才开走,统计一天中,连续停放n(1至10)小时的数量

如下:

  • 第一个停车位中,连续出现3次的区域只有一个(3个"GG") ,因此这个停车位"连续停车3小时"结果是1
  • 同理,"连续停车2小时"结果是2(分别是"AA"与"FF")

导入库与加载数据:


需求1

按理解,可以描述为"不同车牌数量",相当于去重复后的车牌数

因此代码非常简单:

  • df.iloc ,由于第一列是"时间",不是需要的数据,通过切片获取第一列到最后的所有列
  • .apply ,注意参数 axis 默认为0,表示数据表每一列作为处理单位
  • pd.Series.nunique 就是去重计数

需求2

按理解,我们需要首先统计每个车牌的出现次数,分组统计即可:

  • 我这只考虑一列的处理情况,因为所有列批量处理只需要调用 apply 即可
  • 这里同样可以使用 Series.value_counts() 做到一样的效果

基于这个结果,统计每一种次数的计数即可:

  • 行3:按之前的处理,统计次数
  • 注意此时结果是一个 Series,index(上图红框) 是"连续n小时停车"。value(上图蓝框) 是连续n小时停车出现的次数

把这个过程定义为一个函数:

  • 行6:选出一列执行看看效果

最后,通过 apply 就能处理所有的列:

  • 注意 行索引(蓝框) 是"连续n小时停车"

但是,我们需要的是1至10的结果,怎么办?

reindex 就是为了这种场景而设计:

  • 行4:顺手把空值填成 0

结果:

之后只是合并2个需求结果输出 Excel 即可,具体看源码

但是,结果真的对吗?!!!

看看第5个停车点:

  • 连续停4个小时应该有1个吧
  • 大于4个小时的应该是0吧

但是我们的结果是:

  • 连续6小时竟然有1次

原来,我们的统计过程只是简单的按车牌分组统计,却没有考虑连续问题。

也就是说我们的处理过程根本没有反映需求中的"连续"的意义

怎么办?我也想不到,希望大家给点建议

或者看看专栏关于"波动走势处理"的相关章节,说不定找到答案

下节解答。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识点
  • 需求1
  • 需求2
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档