熊猫sort_values

时间:2019-03-15 19:14:09

标签: python python-3.x pandas kaggle

在对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,依此类推。 请帮忙。谢谢。

1 个答案:

答案 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}))
相关问题