使用Pandas计算各岗位首尾年度平均薪资差值
问题
我有一份包含过去三年岗位名称与薪资的数据集,已生成各年度平均薪资的DataFrame(如下所示),需要针对每个岗位,计算2022年平均薪资减去2020年平均薪资的差值,遍历所有岗位完成计算,请问如何用Pandas实现?
work_year job_title salary_in_usd 0 2020 AI Scientist 45896.000000 1 2020 BI Data Analyst 98000.000000 2 2020 Big Data Engineer 97690.333333 3 2020 Business Data Analyst 117500.000000 4 2020 Computer Vision Engineer 60000.000000 .. ... ... ... 93 2022 Machine Learning Scientist 141766.666667 94 2022 NLP Engineer 37236.000000 95 2022 Principal Data Analyst 75000.000000 96 2022 Principal Data Scientist 162674.000000 97 2022 Research Scientist 105569.000000
解决方案
方法一:使用透视表重塑数据
利用pivot_table将数据转换为“岗位-年度”的二维结构,直接计算差值:
import pandas as pd # 假设你的DataFrame变量名为df # 生成透视表:行是岗位,列是年份,值为对应年度的平均薪资 pivot_df = df.pivot_table( index='job_title', columns='work_year', values='salary_in_usd', aggfunc='first' # 因数据已是年度平均,直接取对应值即可 ) # 计算2022年与2020年的薪资差值 pivot_df['salary_diff_2022_2020'] = pivot_df[2022] - pivot_df[2020] # 提取岗位和差值列,重置索引得到最终结果 result = pivot_df[['salary_diff_2022_2020']].reset_index() print(result)
方法二:分组后展开数据
通过groupby分组后用unstack转换结构,再计算差值:
# 按岗位和年份分组,提取对应年度的平均薪资 grouped = df.groupby(['job_title', 'work_year'])['salary_in_usd'].first().unstack() # 计算薪资差值 grouped['salary_diff_2022_2020'] = grouped[2022] - grouped[2020] # 整理结果格式 result = grouped.reset_index()[['job_title', 'salary_diff_2022_2020']] print(result)
处理缺失数据
如果部分岗位缺少2020或2022年的数据,差值会显示为NaN,可按需处理:
- 填充缺失值为0:
result = result.fillna({'salary_diff_2022_2020': 0})
- 过滤掉存在缺失值的岗位:
result_clean = result.dropna(subset=['salary_diff_2022_2020'])
内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi
相关产品推荐
相关产品推荐

