在对 Kaggle 的 SF Salaries 数据集进行数据分析时 ( https://www.kaggle.com/kaggle/sf-salaries ), 我想知道加类费按照年份和职位的排名。
我的解决方案是:
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
并仅获取“年份”中每个“职务”的高薪员工。不过,我建议您分析一下这是否真的是您想要的。
这是我将使用的代码:
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}))
关于python - Pandas 排序值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55189361/