2016-07-01 21 views
-1

Ich habe einen Code wie folgt:Wie groupby und Filter sortieren Pandas mit

grouped=L2014.groupby(['state','NAME']) 
grouped.mask.value_counts(normalize=True,).sort_index() 

Ergebnisse wie folgt aus:

state NAME   mask 
CO  Adams   False 0.407195 
         True  0.592805 
     Alamosa  False 1.000000 
     Arapahoe  False 0.460602 
         True  0.539398 
     Archuleta  False 1.000000 

Wie von der Spitze der größten 5 True Wert der Zahlen sortieren? und zurückgeben? mögen, wie man die Gruppe durch das Absinken des wahren Wertes zeigt.

nach Versuch aktualisiert:

grouped.mask.value_counts(normalize=1).sort_index(level=2,ascending=False) 

Ergebnisse sind

state NAME    mask 
TX  Zavala    True  0.057416 
    Zapata    True  0.042623 
    Young    True  0.928009 
    Yoakum    True  0.886719 
    Wood    True  0.604720 
    Wise    True  0.859006 
    Wilson    True  0.704336 
    Williamson   True  0.269555 
    Wilbarger   True  0.317355 
    Wichita   True  0.067734 
    Wheeler   True  0.992218 
    Wharton   True  0.298335 
    Webb    True  0.465170 
    Washington   True  0.391229 
    Ward    True  0.269036 
    Waller    True  0.145650 
    Walker    True  0.580991 
    Victoria   True  0.076246 
    Van Zandt   True  0.357858 
    Val Verde   True  0.551620 
    Uvalde    True  0.465817 
    Upton    True  0.900000 
    Upshur    True  0.595388 
    Tyler    True  0.119469 
    Trinity   True  0.215548 
    Travis    True  0.684808 

Wie Sie sehen können, ist der wahre Wert noch nicht vom größten zum kleinsten sortiert, und ich möchte nur Top-5-Werte (5 NAME) für jeden Staat.

Aktualisiert:

Nach Versuch:

L2014.groupby(['state','NAME']).mask.value_counts(normalize=True).filter(like='True', axis=0).nlargest(2000) 

i wie diese:

state NAME    mask 

NE  Furnas   True 1.000000 
OK  Washita   True 1.000000 
TX  Hall    True 1.000000 
SD  Fall River  True 1.000000 
TX  Throckmorton  True 1.000000 
KY  Hamilton   True 1.000000 
IA  Hancock   True 1.000000 
SD  Bennett   True 1.000000 
TX  Stonewall  True 1.000000 
     Carson   True 1.000000 
SD  Adams   True 1.000000 
OK  Sebastian  True 1.000000 
TX  McCurtain  True 1.000000 
     Gray    True 1.000000 
OK  Roger Mills  True 1.000000 
TX  Childress  True 1.000000 
     Reagan   True 1.000000 
KY  Pittsylvania  True 1.000000 
TX  Ochiltree  True 1.000000 
     Motley   True 1.000000 
     Collingsworth True 1.000000 
OK  Harmon   True 1.000000 
KY  Buchanan   True 1.000000 
KS  Woodson   True 1.000000 
     Wilson   True 1.000000 
     Wichita   True 1.000000 
TX  Hartley   True 1.000000 
KS  Cloud   True 1.000000 
     Decatur   True 1.000000 
     Elk    True 1.000000 
IA  Taylor   True 1.000000 

es tut Gruppe von Staat mehr. danke

+0

Sie Ausgang für Klarheit und zeigen sollte. – Vipin

+0

Der Ausgang wird wie oben angezeigt. – alice

+0

Bitte geben Sie einen Beispiel-Eingabedatensatz und die gewünschte Ausgabe (basierend auf Ihrem Beispiel-Eingabedatensatz) ein. Ich bin mir ziemlich sicher - Sie würden innerhalb weniger Minuten eine Antwort bekommen, wenn Sie den Leuten eine Möglichkeit geben würden, ihre Lösung zu testen ... [Wie man gute reproduzierbare Pandas-Beispiele macht] (http://stackoverflow.com/questions/ 20109391/how-to-make-gut-reproduzierbare Pandas-Beispiele) – MaxU

Antwort

1

Try this:

grouped.mask.value_counts(normalize=1).sort_index(level=2,ascending=False).filter(like='True', axis=0).nlargest(5) 

oder

grouped.mask.value_counts(normalize=1).filter(like='True', axis=0).nlargest(5) 
+0

Es immer noch nicht die Ergebnisse, die ich wollte. Wenn ich versuche, die Sie gerade vorgeschlagen, es mir geben: NAME maskiert Zustand CO Chase Wahr 1,0 IA Hancock Echten 1.0 Taylor Echte 1.0 KS Wolke Echter 1.0 Decatur Echte 1.0 – alice

+0

habe ich versucht, Code Ihre Linie, nur die oberen geben 5 Ergebnisse, zeigen Sie mir nicht die Ergebnisse von Staat und NAME. Es zeigt nur N Datensätze an der Spitze. – alice