在对Kaggle(https://www.kaggle.com/kaggle/sf-salaries)的SF Salaries数据集进行数据分析时, 我想知道基于Year和JobTitle的加班费排名。
我的解决方法是:
df = df[['Year','JobTitle','OvertimePay']].copy()
df2 = df.sort_values('OvertimePay', ascending= False)
which turned out to be like this。 显然,结果没有达到我的预期。 除了索引,它似乎排序不当,因为173547.73之后应该是163477.81,依此类推。 请帮忙。谢谢。
答案 0 :(得分:0)
我不确定您是否意识到每一行都对应于不同的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}))