【问题标题】:How to sort groupby and filter using pandas如何使用 pandas 对 groupby 进行排序和过滤
【发布时间】:2016-11-04 05:13:30
【问题描述】:

我有这样的代码:

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 个 True 值对数字进行排序?并返回它? 比如如何通过真值的降序来显示分组。

更新 尝试后:

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 个名称)。

更新:

尝试后:

 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

它不再按州分组。 谢谢你

【问题讨论】:

  • 为了清晰起见,您还应该显示输出。
  • 输出如上图
  • 请发布示例输入数据集和所需的输出(基于您的示例输入数据集)。我很确定 - 如果你能让人们有机会测试他们的解决方案,你会在几分钟内得到答案......How to make good reproducible pandas examples
  • 它足够清晰。不知道我应该怎么添加
  • 您想要一个对您的数据有用的答案还是只是一些答案? ;)

标签: python pandas group-by


【解决方案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)

【讨论】:

  • 它仍然不是我想要的结果。当我尝试你刚刚建议时,它给了我:state NAME mask CO Chase True 1.0 IA Hancock True 1.0 Taylor True 1.0 KS Cloud True 1.0 Decatur True 1.0
  • 我试过你的代码,它只给出前5个结果,不显示按状态和名称的结果。它只在顶部显示 N 条记录。
猜你喜欢
  • 2021-08-27
  • 2013-07-30
  • 2022-11-03
  • 2019-06-27
  • 1970-01-01
  • 2018-11-16
  • 2017-01-20
  • 2019-11-04
  • 1970-01-01
相关资源
最近更新 更多