【已解决】如何获取到DF数据里最新的调薪时间,就是薪资最高且时间最早?

简介: 【已解决】如何获取到DF数据里最新的调薪时间,就是薪资最高且时间最早?
问题说明:

前几天在Python最强王者交流群【群除我佬】问了一个Pandas处理的问题,这里拿出来给大家分享下。

看上去不太好理解,其实说白了,就是在工资最高里,再找时间最早的。

换句话说就是,这三个人,每个人找工资最高,然后在这个范围里找时间最早  就是他的调薪时间。

解决方法:

这里我们提供一种解决方案:

import pandas as pd
 
data = {'name': ['陈六', '吴三', '吴三', '陈六', '钱十', '陈六', '吴五', '吴五', '陈六', '吴八', '钱十', '陈六'],
        'date': ['2024-01-04', '2024-01-13', '2024-01-29', '2024-01-12', '2024-01-20', '2024-01-19', '2024-01-27',
                 '2024-01-20', '2024-01-09', '2024-01-08', '2024-01-14', '2024-01-28'],
        'salary': [6026, 5352, 5791, 9567, 9728, 6160, 9015, 9508, 9253, 9570, 8690, 7395]}
 
df = pd.DataFrame(data)
print(df.sort_values(['name', 'salary', 'date'], ascending=[True, False, True]).groupby(['name']).head(1))
结果展示:

代码说明:
print(df.sort_values(['name', 'salary', 'date'], ascending=[True, False, True])

排序 DataFrame:

  • df.sort_values([...]): 对 DataFrame df 进行排序。
  • ['name', 'salary', 'date']: 表示按 namesalarydate 三列进行排序。
  • ascending=[True, False, True]:
  • name 列进行升序排列(即 A 到 Z)。
  • salary 列进行降序排列(即从高到低)。
  • date 列进行升序排列(即从早到晚)。

经过这一步,DataFrame 将首先按姓名升序排列,在同一姓名下,按薪资降序排列;如果薪资相同,则按日期升序排列。

.groupby(['name']).head(1)
  • 分组并选取第一条记录:
  • .groupby(['name']): 根据 name 列将 DataFrame 分组,这会将具有相同名字的行聚集在一起。
  • .head(1): 从每个分组中提取前一行。由于之前已经按薪资降序排列,因此每个姓名组的第一行将是该姓名下薪资最高的记录。
  • 打印结果: 最终代码会输出一个 DataFrame,其中每个员工姓名只会保留薪资最高的一条记录,若有多个相同薪资,则选择日期最早的记录。
概要总结:
  • 这段代码的主要目的是从 DataFrame 中提取每个员工薪资最高且在先的记录。
  • 首先按姓名和薪资进行排序,然后分组并获取每个员工的最高薪资记录。
相关文章
|
5月前
【qt】一次性讲清楚日期和时间1
【qt】一次性讲清楚日期和时间
60 0
|
5月前
【qt】一次性讲清楚日期和时间2
【qt】一次性讲清楚日期和时间
31 0
【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
如何确定两个日期之间的工作日有多少天、计算—年中每周内各日期出现次数、确定当前记录和下一条记录之间相差的天数【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。本章节的三个需求:确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数有些许难度,不过建议还是学会比较好。
【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
|
缓存
实战:第三章:更新数据只能是下月修改,当月不能修改
实战:第三章:更新数据只能是下月修改,当月不能修改
|
SQL 关系型数据库 MySQL
MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
639 0
MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
|
Unix
strtotime应用(案例:给未来时间添加对应的时间)
strtotime应用(案例:给未来时间添加对应的时间)
204 0
strtotime应用(案例:给未来时间添加对应的时间)
生成以周统计的表头,跨月份的周算在后一个月
这是人力统计的一个表格的表头,根据月份,划分周,每周从周一开始到周日(国内习惯性)。而跨月份的周算在前一个月还是后一个月,我们的需求是算在后一个月。根据情况而定。
236 0
生成以周统计的表头,跨月份的周算在后一个月
L1-2 h0053. 游戏时间 (5 分)
读取四个整数A,B,C,D,用来表示游戏的开始时间和结束时间。 其中A和B为开始时刻的小时和分钟数,C和D为结束时刻的小时和分钟数。 请你计算游戏的持续时间。 比赛最短持续1分钟,最长持续24小时。
132 0
SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?
SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?
SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?