如何使用二次排序对应打印行

2024-10-03 15:21:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个简单的任务,整齐地打印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))

Tags: csv代码namefalse示例排序国家sort
1条回答
网友
1楼 · 发布于 2024-10-03 15:21:55

它有助于分解这些步骤,以便您能够查明问题的根源

首先,创建一个用于索引的掩码

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默认情况下会将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)
)

相关问题 更多 >