2017-10-11 3 views
0

Je cherche à faire la tâche simple d'imprimer soigneusement la rangée name, correspondant à pays, et à droite de cette islmtotal rangée en ordre décroissant. Mon code ci-dessous imprime seulement islmtotal, mais j'ai donné un exemple de la façon dont il devrait ressembler:comment imprimer ligne pandas avec la deuxième rangée triée correspondant

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

Comment ça imprime maintenant? À quoi ressemble votre df d'origine? Pas beaucoup d'info pour aller ici. –

+0

J'ai modifié le code ci-dessus pour plus de clarté. –

Répondre

0

Il aide à briser les étapes, afin que vous puissiez identifier la source de votre problème .

D'abord, créez un masque à indexer.

m = religion['year'] == religyearask 

Maintenant, indexez et triez.

df = religion.loc[m].sort_values('year', ascending=False) 

Maintenant, groupby et trouver max.

df = df.groupby('name', as_index=False)['islmtotal'].max() 

Vraisemblablement, c'est la source de votre problème. Notez que groupby convertit par défaut la colonne group-by en index, donc as_index=False l'empêchera.

Maintenant, convertissez en to_string et imprimez.

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

ok cela m'a considérablement rapproché, mais ce que je vois le spectacle de code ci-dessus est les colonnes, mais son groupe par pays alphabétisé. Je préférerais que les nombres décroissants soient la méthode de tri. –

+0

@ Mr.Jibz Super à savoir. Malheureusement, je ne suis pas en mesure de visualiser votre problème, si vous me l'expliquez. Ceci est juste votre code avec une modification mineure. Si vous souhaitez obtenir de l'aide sur la façon de modifier votre méthode pour vous rapprocher de votre solution, je vous recommande d'ouvrir une nouvelle question et de faire les choses suivantes. 1. montrez vos données sous forme de texte, 2. montrez votre production courante. 3. montrez votre production attendue. 4. montrez votre code actuel. À votre santé! –