Pandas sort_values

Pandas sort_values

在对来自 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 等之后。 请帮忙。谢谢。

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

为了实现您想要的结果,您可以 drop_duplicates 并在 "Year" 中为每个 "Job Title" 只获得高薪员工。但是,我建议你分析一下这是否真的是你要找的。

这是我要使用的代码:

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}))