在对Kaggle(https://www.kaggle.com/kaggle/sf-salaries)的SF Salaries数据集进行数据分析时,
我想知道基于Year和JobTitle的加班费排名。

What I decided to get

我的解决方案是:

df = df[['Year','JobTitle','OvertimePay']].copy()
df2 = df.sort_values('OvertimePay', ascending= False)


which turned out to be like this
显然,结果没有达到我的预期。
除索引外,它似乎排序不当,因为173547.73之后应该是163477.81,依此类推。
请帮忙。谢谢。

最佳答案

我不确定您是否意识到每一行都对应一个不同的Employee。因此,当您执行df = df[['Year','JobTitle','OvertimePay']].copy()时,同一年会出现多次“副警长”,每位雇员一次。这可能会发生多次,因为有不同的员工具有相同的“ JobTitle”。

为了实现您想要的目标,您可以drop_duplicates并仅在“年份”中为每个“职位”获得高薪员工。但是,我建议您分析一下这是否是您真正想要的。

这是我要使用的代码:

import numpy as np
import pandas as pd

df = pd.read_csv('Salaries.csv')
df['OvertimePay'] = df['OvertimePay'].replace("Not Provided",np.nan).astype(float)
df = df[['Year','JobTitle','OvertimePay']].copy()
df.drop_duplicates(subset=['Year','JobTitle'])
df2 = df.sort_values('OvertimePay', ascending= False)


编辑:要更改格式,我将使用类似:

print(df2.iloc[0:20,].to_string(header=['Year','JobTitle',''],index=False,justify='left',
                                formatters={'JobTitle':'{{:<{}s}}'.format(df2['JobTitle'].str.len().max()).format}))

10-06 12:14