【已解决】如何获取到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 中提取每个员工薪资最高且在先的记录。
  • 首先按姓名和薪资进行排序,然后分组并获取每个员工的最高薪资记录。
相关文章
|
Java 云计算
阿里云国际站代理商:Java计算当前时间处于某段时间内的第几周、第几个月
@luotuoemo飞机@TG阿里云国际站代理商:Java计算当前时间处于某段时间内的第几周、第几个月,以上就是使用Java代码计算当前时间处于某段时间内的第几周和第几个月的全部内容。通过该篇文章,我们可以了解到如何使用Java的Calendar类以及日期函数来计算时间段内的周数和月数,掌握相应的计算方法和实践技巧。在开发过程中,合理运用这些方法,可以方便地获取时间相关的信息,满足业务需求,提高开发效率。希望本文能对读者在使用阿里云国际站代理商开发Java应用时计算时间段的周数和月数提供一些帮助与启示。
【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
如何确定两个日期之间的工作日有多少天、计算—年中每周内各日期出现次数、确定当前记录和下一条记录之间相差的天数【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。本章节的三个需求:确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数有些许难度,不过建议还是学会比较好。
【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
面试题:判断两个时间是否在同一周
这个题是在面试的时候遇到的,还遇到了2次,和大家分享一下自己的解题思路 感觉像是一个业务上的题,可能面试官刚做过类似的需求,就直接拿出来问了
|
SQL 关系型数据库 MySQL
MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
704 0
MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
|
Unix
strtotime应用(案例:给未来时间添加对应的时间)
strtotime应用(案例:给未来时间添加对应的时间)
213 0
strtotime应用(案例:给未来时间添加对应的时间)
L1-2 h0053. 游戏时间 (5 分)
读取四个整数A,B,C,D,用来表示游戏的开始时间和结束时间。 其中A和B为开始时刻的小时和分钟数,C和D为结束时刻的小时和分钟数。 请你计算游戏的持续时间。 比赛最短持续1分钟,最长持续24小时。
141 0
|
数据库
LeetCode(数据库)- 查找每个员工花费的总时间
LeetCode(数据库)- 查找每个员工花费的总时间
119 0
|
SQL
SQL查询今天与昨天的记录,及本月记录、本周记录
数据操作中涉及到统计的部分主要借助数据库内置函数完成 SQL查询今天的记录: datediff(day,[Datetime],getdate())=0  把Datetime换为你的相应字段; SQL查询昨天的记录: datediff(day,[Datetime],getdate())=1  把Datetime换为你的相应字段,getdate()-Datetime即为时间差。
3046 0