如何使用pandas对groupby进行排序和过滤

时间:2016-07-01 17:55:09

标签: python pandas group-by

我有这样的代码:

main

结果如下:

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

如何按最大的5真值排序数字?还给它? 比如如何通过真值的降序来显示小组。

更新 尝试后:

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

结果是

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

正如您所看到的,真实值仍然没有从最大到最小排序,我只希望每个州的前5个值(5个NAME)。

更新:

尝试后:

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

我是这样的:

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

它再按州分组。 谢谢

1 个答案:

答案 0 :(得分: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)