如何打印带有第二个排序对应行的熊猫行



我希望完成一个简单的任务,即整齐地打印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))

它有助于分解步骤,因此您可以查明麻烦的根源。

首先,创建一个要编制索引的掩码。

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

单线™

print(
    religion.loc[religion['year'] == religyearask]
            .sort_values('year', ascending=False)
            .groupby('name', as_index=False)['islmtotal'].max()
            .to_string(index=False)
)

相关内容

最新更新