Pandas 数据筛选,去重结合group by

需求

今小伙伴有一个Excel表, 是部门里的小伙9月份打卡记录, 关键字段如下:

姓名, 工号, 日期, 打卡方式, 时间, 详细位置, IP地址....

脱敏数据:

姓名 工号 日期 方式 时间 ...
小赵 123 2019-09-01 GPS 08:37:50 ....
小赵 123 2019-09-01 GPS 18:10:50 ...
小陈 124 2019-09-01 GPS 08:47:30 ...
小陈 124 2019-09-01 GPS 15:07:50 ...
小陈 124 2019-09-01 GPS 18:07:5 ...
小赵 123 2019-09-02 GPS 08:55:50 ...
小李 125 2019-09-02 PC 13:10:24

即每个小伙伴, 一个月(30天), 正常打卡是60次, 上午,下午各一次/每天. 但真实情况是: 可能忘记打卡,或者一天打了n次, 现要求是 筛选出上班迟到(9:00) 的所有人员信息.

一看, 这用Excel, 透视一下姓名, 然后筛选日期...., 我感觉我的EXCEL水平怕是支撑不了, 但, Pandas可以呀, 5行代码搞定数据透视和条件过滤.

核心思路:

  • 先按照 性别 进行分组, 然后对每组中, 日期 字段去重, 保留第一条记录即可.

  • 筛选出 时间 在 9:00 之后的记录, 存为Excel即可.

完整代码如下:

import pandas as pd 

# 1. 读取数据
data = pd.read_excel("9月打卡记录.xlsx")
data['时间'] = pd.to_datetime(data["时间"], format="%H:%M:%S") # 2. 先按姓名分组, 再对日期去重,保留第一个值
ret = data.groupby("姓名", as_index=False).apply(lambda df:df.drop_duplicates("日期")) # 3. 筛选日期,并保存为excel文件
ret[ret["时间"] >= "1900/1/1 09:00:00"].to_excel("9月迟到名单.xlsx", index=False)

该篇的目的是为了巩固这些常用的知识点, 如 group by 结合 apply 的用法, 匿名函数, 时间字符串处理等.当然会有更复杂情况, 如分组过后, 按日期去重, 保留的第一条记录, 不是最早打卡的那条? 那这就需要写排序逻辑了, 这里只是先抛砖引玉一波.

小结

  • pandas 读取文件, pd.read_excel( ); pd.read_csv( ); pd.read_json( ); pd.read_sql_table( )...

  • 写入文件: pd.to_excel( ); pd.to_csv( ) ....

  • 字段筛选过滤等操作必须熟练.

  • 时间字符串 与 时间类型 的 互相转换 datetime 模块

  • group by 分组聚合, agg(); apply( ), 结合Excel 透视表就很好理解

  • 关于映射: apply(函数名), 应用于整行or列, 对应的还有, applymap 作用每个元素, map()作用于某列Series.

  • 关于匿名函数lambda 的用法及与普通function的区别.

  • 后续还有更多工作案例分享, 基础, 高阶,都会有的.....

Pandas 数据筛选,去重结合group by的更多相关文章

  1. python之pandas数据筛选和csv操作

    本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明 1. 数据筛选 a b c (1)单条件筛选 df[df[] # 如果想筛选a列的取 ...

  2. Pandas数据的去重,替换和离散化,异常值的检测

    数据转换 移除重复数据 import pandas as pd import numpy as np from pandas import Series data = pd.DataFrame( {' ...

  3. pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。

    Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...

  4. Pandas数据规整

    Pandas数据规整 数据分析和建模方面的大量编程工作都是用在数据准备上的,有时候存放在文件或数据库中的数据并不能满足数据处理应用的要求 Pandas提供了一组高级的.灵活的.高效的核心函数和算法,它 ...

  5. Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV

    Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV – lxw的大数据田地 http://lxw1234.com/archives/2015/09/516.htm Java使用极小 ...

  6. Python的工具包[1] -> pandas数据预处理 -> pandas 库及使用总结

    pandas数据预处理 / pandas data pre-processing 目录 关于 pandas pandas 库 pandas 基本操作 pandas 计算 pandas 的 Series ...

  7. 使用 joblib 对 Pandas 数据进行并行处理

    使用 joblib 对 Pandas 数据进行并行处理 如果需要对一个很大的数据集进行操作,而基于一列数据生成新的一列数据可能都需要耗费很长时间. 于是可以使用 joblib 进行并行处理. 假设我们 ...

  8. 4-Pandas之数据类型与数据筛选

    一.数据类型 1.Pandas的数据类型主要结合了pandas和numpy两个模块中的数据类型,包括以下几种: float int bool datetime64[ns]------>日期类型 ...

  9. pandas 数据子集的获取

    有时数据读入后并不是对整体数据进行分析,而是数据中的部分子集,例如,对于地铁乘客量可能只关心某些时间段的流量,对于商品的交易可能只需要分析某些颜色的价格变动,对于医疗诊断数据可能只对某个年龄段的人群感 ...

随机推荐

  1. java.lang.ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect

    添加这个依赖 <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystr ...

  2. IfcColumn

    IfcColumn is a vertical structural member which often is aligned with a structural grid intersection ...

  3. Jmetal设置Solution Variables

    Jmetal设置Solution Variables 觉得有用的话,欢迎一起讨论相互学习~Follow Me 首先每个solution都必须使用Problemset初始化 ProblemSet pro ...

  4. RunTime总结:

    oc动态性, 运行时将代码转化为runtime的C代码 RunTime运行流程: 生成对应objc_msgSend方法 isa指针查看当前类有没有这个方法, 之后寻找父类, 每个方法SEL(方法选择器 ...

  5. 基于term vector深入探查数据

    1.term vector介绍 获取document中的某个field内的各个term的统计信息 term information: term frequency in the field, term ...

  6. CentOS7下Redis的安装与使用

    一.安装过程 1.准备工作(安装gcc依赖) # yum install gcc-c++ 2.下载并解压源码包 # cd /usr/local # wget http://download.redis ...

  7. EasyNVR摄像机网页无插件直播方案H5前端构建之:bootstrap-datepicker日历插件的实时动态展现

    EasyNVR场景需求 基础:不管是城市监控还是园区管理或者是幼儿园监控,这些安防监控需求已经成为我们生活中不可或缺的重要一环,这不仅仅是提升城市管理水平和人民群众安全感的现实需求,也是完善社会治安消 ...

  8. mysq5.7 主主同步

    db01  172.21.0.10 db02  172.21.0.14 一.安装数据库看上一遍博客 修改配置文件  db01  172.21.0.10 [root@VM_0_10_centos mys ...

  9. MySQL报错Packet for query is too large问题解决

    今天用java写了批量插入运行时,报错: Error updating database.  Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigExcep ...

  10. IntelliJ IDEA重新打开后把字母隐藏怎么办

    默认Font的字体melno不行,r会隐形 解决方案:更换idea字体,点击apply按钮即可正常显示 修改Font为的consoleas  Size:16   line spacing:1.25