2017-03-08 2 views
1
In [167]: 
    df 

Out[167]: 
    Gender University 
0 Male A 
1 Female B 
2 Male C 
3 Male D 
4 Male E 
5 Female A 
6 Female B 
7 Female C 
8 Female D 
9 Female E 

In [168]: 
df.groupby(['University','Gender'])['Gender'].size().unstack('Gender').fillna(0) 

Out[168]: 

enter image description heredataframe GroupBy tri (variable catégorique)

Maintenant, je voudrais trier par Femme et Homme élevé au plus bas de sorte que lorsque je bar intrigue, ce sera dans un ordre décroissant. J'ai essayé plusieurs façons mais en vain.

Dans ma dernière tentative, j'ai essayé:

df.groupby(['University','Gender'])['Gender'].size().unstack('Gender').fillna(0).sort_values(ascending=False) 

TypeError: sort_values() missing 1 required positional argument: 'by' 

Toutes les suggestions?

+0

'par = [ 'Femme', 'Homme']' – AChampion

Répondre

1

Vous pouvez trier par une ou une autre colonne:

print (df) 
    Gender University 
0 Male   A 
1 Female   B 
3 Male   D 
4 Male   E 
5 Female   A 
2 Male   C 
3 Male   D 
4 Male   E 
5 Female   A 
6 Female   B 
7 Female   C 
8 Female   D 
4 Male   E 
5 Female   A 
6 Female   B 
3 Male   D 
4 Male   E 
5 Female   A 
7 Female   C 
8 Female   D 
9 Female   E 
df1 = df.groupby(['University','Gender'])['Gender'] 
     .size() 
     .unstack('Gender', fill_value=0) 
     .sort_values(by='Female', ascending=False) 

print (df1) 
Gender  Female Male 
University    
A    4  1 
B    3  0 
C    2  1 
D    2  3 
E    1  4 

df1.plot.bar() 

graph1

df2 = df.groupby(['University','Gender'])['Gender'] 
     .size() 
     .unstack('Gender', fill_value=0) 
     .sort_values(by='Male', ascending=False) 
print (df2) 
Gender  Female Male 
University    
E    1  4 
D    2  3 
A    4  1 
C    2  1 
B    3  0 

df2.plot.bar() 

graph2

Si sorte par les deux colonnes de tri de la seconde colonne de tri que les doublons (D, C colonnes):

df3 = df.groupby(['University','Gender'])['Gender'] 
     .size() 
     .unstack('Gender', fill_value=0) 
     .sort_values(by=['Female', 'Male'], ascending=False) 
print (df3) 

df3.plot.bar() 

graph

+0

Merci! Si je voudrais trier par le nombre de personnes d'une université indépendamment du sexe (du plus haut au plus bas). Comment puis je faire ça? – misheekoh

+0

Je ne comprends pas, quelle est la différence avec ma réponse? Pouvez-vous expliquer plus? – jezrael

+0

hmm. C'est bon. C'est bon. Merci! – misheekoh