我希望完成简单的任务,即整齐地打印对应于国家/地区的name
行,以及islmtotal
行按降序排序的权利。我下面的代码只打印islmtotal
,但我给出了一个示例:
Name Islmtotal
USA 1.99
GER 1.93
NED .76
religion = pd.read_csv('natldata.csv', usecols = [0, 2, 51, 52, 53, 54, 55, 56, 57, 58], na_values=['NULL'])
religion['islmtotal']= religion[['islmsunpct', 'islmshipct', 'islmibdpct', 'islmnatpct', 'islmalwpct', 'islmahmpct', 'islmothrpct', 'islmgenpct']].sum(axis=1)
religyearask = input("Please enter year in multiples of 5 (eg 1980): ")
maxstateyear = religion.loc[religion['year'] == religyearask].sort_values('year', ascending=False).groupby(['name'], sort=False)['islmtotal'].max()
print(maxstateyear.to_string(index=False))
答案 0 :(得分:0)
它有助于分解步骤,因此您可以找出问题的根源。
首先,创建一个索引的掩码。
m = religion['year'] == religyearask
现在,索引并排序。
df = religion.loc[m].sort_values('year', ascending=False)
现在,groupby
并找到max
。
df = df.groupby('name', as_index=False)['islmtotal'].max()
据推测,这是你麻烦的根源。请注意,默认情况下groupby
会将分组依据列转换为索引,因此as_index=False
会阻止此操作。
现在,转换为to_string
并打印。
print(maxstateyear.to_string(index=False))
<强> OneLiner™强>
print(
religion.loc[religion['year'] == religyearask]\
.sort_values('year', ascending=False)\
.groupby('name', as_index=False)['islmtotal'].max()\
.to_string(index=False)
)