Python初学者所以请耐心等待。
我有一个包含4列和~1500行的文件。我需要做的是将以下信息返回到控制台:
1)最高收入者的性别,年龄和工资
2)最低收入者的性别,年龄和工资
3)此数据集中前十名收入者中的女性人数。
我的数据看起来有点像(在csv文件中):
Gender, Years, Education, Wage
Female, 4, 9, 8.35
Male, 6, 6, 7.86
Male, 2, 8, 6.95
Female, 5, 6, 7.45
Male, 13, 9, 9.56
等
我被告知大熊猫或numpy最适合这类工作,但我对如何处理这类问题的格式感到困惑。
答案 0 :(得分:3)
对于最小值和最大值,@ Zero可以很好地覆盖它。我会提出这些想法:
您可以使用input
agg
您可以使用
显示这些行df.Wage.agg(['idxmax', 'idxmin'])
idxmax 4
idxmin 2
Name: Wage, dtype: int64
你可以df.loc[df.Wage.agg(['idxmax', 'idxmin'])]
Gender Years Education Wage
4 Male 13 9 9.56
2 Male 2 8 6.95
回来,以获得漂亮的索引值,告诉你哪个是最小值和最大值
join
对于收入最高的女性人数,我会使用df.Wage.agg(['idxmax', 'idxmin']).to_frame('index').join(df, on='index')
index Gender Years Education Wage
idxmax 4 Male 13 9 9.56
idxmin 2 Male 2 8 6.95
我们不仅传递pd.DataFrame.nlargest
的数字,而是传递我们用于确定最大数量的列。
n
答案 1 :(得分:2)
1)最高收入者
In [4336]: df.loc[df['Wage'].idxmax()]
Out[4336]:
Gender Male
Years 13
Education 9
Wage 9.56
Name: 4, dtype: object
2)最低收入者
In [4337]: df.loc[df['Wage'].idxmin()]
Out[4337]:
Gender Male
Years 2
Education 8
Wage 6.95
Name: 2, dtype: object
3)前10名收入者中的女性人数
In [4338]: df[df['Wage'] >= df['Wage'].nlargest(10).iloc[-1]]['Gender'].eq('Female').sum()
Out[4338]: 2
详细
您可以将csv读入数据框,如df = pd.read_csv('filename.csv')
In [4339]: df
Out[4339]:
Gender Years Education Wage
0 Female 4 9 8.35
1 Male 6 6 7.86
2 Male 2 8 6.95
3 Female 5 6 7.45
4 Male 13 9 9.56
答案 2 :(得分:1)
使用pandas:
import pandas as pd
df = pd.read_csv('csv_file.csv')
df.sort_values('Wage', ascending=False, inplace=True)
highest_earner = df.iloc[0]
lowest_earner = df.iloc[-1]
num_of_females = len(df.iloc[0:10][df['Gender'] == 'Female'])