作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定包含等级和薪水的人力资源员工数据集,我希望确定每个员工的等级和薪水是否发生变化。
我能够使用 .diff() pandas 函数来做到这一点,但是当第二个员工进来时,它会获取最后一个员工的数据,这不是我所期望的。我希望为每个员工使用 .diff() 函数或其他方式。
这是迄今为止使用的代码。
import pandas as pd
# This is my Dataset
hr = pd.DataFrame({'Employee': ['100201', '100201', '100201',
'100201', '100201', '100201','100299', '100299'],
'Month/Year': ['01.2018', '02.2018', '03.2018',
'04.2018', '05.2018', '06.2018','01.2019', '02.2019'],
'Salary': [12175, 13000, 13000, 13125, 14000,
14000, 20000, 21000],
'Grade': [1, 1, 2, 2, 2, 1, 3, 4],
'Position': [1, 1, 2, 2, 2, 2, 3, 4]})
hr
# This is how I check the diff from each month:
hr.set_index('Employee')
hr['Increase'] = hr['Salary'].diff(1)
hr['Grade Change'] = hr['Grade'].diff(1)
hr
# Finally just apply a lambda function
hr['Promotion'] = hr['Increase'].apply(lambda x: x > 0 )
hr['Grade Increase'] = hr['Grade Change'].apply(lambda x: x != 0 )
hr
正如您在结果中看到的:
我能够理解员工 100201 的所有级别和薪资变化。但是,对于员工 100299,代码从员工 100299 的索引 5 中取出 14000 的薪资,因此提到有 6000 的薪资变化。事实上,员工 100299 是在 2019 年 1 月才加入的,起始工资为 20000。2019 年 2 月,工资变化是正确的。
我真正期望的是每当数据集中有新员工时就进行某种休息。
我是 Python 和 pandas 的新手,所以这会有很大帮助。提前致谢!
最佳答案
使用DataFrame.groupby
与 groupby 'Employee'
:
hr[['Salary_increase', 'Grade_change']] = hr.groupby('Employee')[['Salary', 'Grade']].diff()
hr[['Promotion', 'Grade_increase']] = hr[['Salary', 'Grade']].diff().gt(0)
[输出]
Employee Month/Year Salary Grade Position Salary_increase Grade_change \
0 100201 01.2018 12175 1 1 NaN NaN
1 100201 02.2018 13000 1 1 825.0 0.0
2 100201 03.2018 13000 2 2 0.0 1.0
3 100201 04.2018 13125 2 2 125.0 0.0
4 100201 05.2018 14000 2 2 875.0 0.0
5 100201 06.2018 14000 1 2 0.0 -1.0
6 100299 01.2019 20000 3 3 NaN NaN
7 100299 02.2019 21000 4 4 1000.0 1.0
Promotion Grade_increase
0 False False
1 True False
2 False True
3 True False
4 True False
5 False False
6 True True
7 True True
关于python - 如何使用 diff() 函数来识别 Pandas 中的薪资变化以进行人力资源分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55745641/
我是一名优秀的程序员,十分优秀!