Pandas 数据筛选,去重结合group by
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的更多相关文章
- python之pandas数据筛选和csv操作
本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明 1. 数据筛选 a b c (1)单条件筛选 df[df[] # 如果想筛选a列的取 ...
- Pandas数据的去重,替换和离散化,异常值的检测
数据转换 移除重复数据 import pandas as pd import numpy as np from pandas import Series data = pd.DataFrame( {' ...
- pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...
- Pandas数据规整
Pandas数据规整 数据分析和建模方面的大量编程工作都是用在数据准备上的,有时候存放在文件或数据库中的数据并不能满足数据处理应用的要求 Pandas提供了一组高级的.灵活的.高效的核心函数和算法,它 ...
- Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV
Java使用极小的内存完成对超大数据的去重计数,用于实时计算中统计UV – lxw的大数据田地 http://lxw1234.com/archives/2015/09/516.htm Java使用极小 ...
- Python的工具包[1] -> pandas数据预处理 -> pandas 库及使用总结
pandas数据预处理 / pandas data pre-processing 目录 关于 pandas pandas 库 pandas 基本操作 pandas 计算 pandas 的 Series ...
- 使用 joblib 对 Pandas 数据进行并行处理
使用 joblib 对 Pandas 数据进行并行处理 如果需要对一个很大的数据集进行操作,而基于一列数据生成新的一列数据可能都需要耗费很长时间. 于是可以使用 joblib 进行并行处理. 假设我们 ...
- 4-Pandas之数据类型与数据筛选
一.数据类型 1.Pandas的数据类型主要结合了pandas和numpy两个模块中的数据类型,包括以下几种: float int bool datetime64[ns]------>日期类型 ...
- pandas 数据子集的获取
有时数据读入后并不是对整体数据进行分析,而是数据中的部分子集,例如,对于地铁乘客量可能只关心某些时间段的流量,对于商品的交易可能只需要分析某些颜色的价格变动,对于医疗诊断数据可能只对某个年龄段的人群感 ...
随机推荐
- HTML+CSS实现鼠标点上去动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java 文件句柄泄露问题解决小记(转)
转:Java 文件句柄泄露问题解决小记 维护 WebIDE 免不了要管理很多的文件, 自从我们线上系统增加了资源回收功能,便一直受一个问题困扰:后台线程解绑目录时偶尔报错,看症状因为是某些文件被占用了 ...
- iOS - 获取当前时间日期星期几
//获取当前时间日期星期 - (NSString *)getCurrentTimeAndWeekDay { NSArray * arrWeek=[NSArray arrayWithObjects:@& ...
- vue-cli3项目关闭烦人的代码检测
参考博客:https://blog.csdn.net/e1172090224/article/details/99636767 vue.config.js module.exports = { lin ...
- [PHP] dompdf 使用记录
# 安装字体,解决中文乱码参考: https://blog.51cto.com/lampzxr/1916038```首先下载composer curl -sS https://getcomposer. ...
- (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...
- oracle 通用事务使用
private void dothing() { OracleConnection con = DBHelperOracle.init(); OracleTransaction tran = con. ...
- npm 创建vue项目(指定目录进行创建)
1.先安装node,js和npm 检验mpm 和node的方式是 npm -v / node -v 2.安装最新版本 npm install @vue/cli -g 意外安装老版本的是代码 npm ...
- Linux安装kafka2.3.1基于Scala2.12
一,先从官网下载:http://kafka.apache.org/downloads 二,解压压缩包(虽然后缀是tgz,但和gz解压方式一样):然后mv kafka_2.12-2.3.1 /usr/l ...
- LeetCode 912. 排序数组(Sort an Array) 43
912. 排序数组 912. Sort an Array 题目描述 每日一算法2019/6/15Day 43LeetCode912. Sort an Array