2016-07-01 2 views
-1

У меня есть такой код:Как сортировать GroupBy и фильтр, используя панда

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

результатов, как это:

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 

Как сортировать номера в верхнем 5 крупнейших истинном значении? и вернуть его? нравится, как показать группу по убыванию истинного значения.

обновленный после попытки:

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

результатов

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 

Как вы можете видеть, что истинное значение до сих пор не сортируется от самых больших до самых маленьких, и я хочу только первые 5 значений (5 NAME) для каждого состояния.

Обновлено:

После попытки:

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

я получаю так:

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 

это делает группа государством больше. спасибо

+0

Вы должны показать выход, а для ясности. – Vipin

+0

Выход показан как указано выше – alice

+0

Пожалуйста, разместите образец входных данных и желаемый результат (на основе вашего набора данных ввода образца). Я уверен: у вас будет ответ в течение нескольких минут, если вы дадите людям возможность проверить свое решение ... [Как сделать хорошие воспроизводимые примеры панд] (http://stackoverflow.com/questions/ 20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

ответ

1

Попробуйте это:

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

или

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

Это еще не те результаты, которые я хотел. Когда я пытаюсь просто предложил, это дать мне: состояние NAME маскировать CO Chase Правда 1,0 IA Hancock Правда 1,0 Тейлор Правда 1,0 KS Cloud Правда 1,0 Decatur Правда 1,0 – alice

+0

Я попробовал свою линию в коде, это дать только верхний 5 результатов, не показывайте результаты по состоянию и NAME. Он показывает только N записей сверху. – alice

Смежные вопросы