【问题标题】:How to sort column by value counts in pandas如何在熊猫中按值计数对列进行排序
【发布时间】:2023-03-09 00:57:01
【问题描述】:

我想在 pandas 中对数据框进行排序。我想通过按值计数对 2 列进行排序来做到这一点。一个取决于另一个。如图所示,我已经实现了分类排序。但是,我希望“类别”列按值计数排序。然后数据框将根据同一类别下的'beneficiary_name'再次排序。

这是我为实现这一目标而编写的代码。

data_category = data_category.sort_values(by=['category','beneficiary_name'], ascending=False)

请帮我解决这个问题。谢谢。

【问题讨论】:

  • 能否在您的问题中提供一个数据框?请参阅How to make good reproducible pandas examples 寻求帮助
  • df['counts'] = df.groupby('category')['data'].transform('size') 分配计数。然后你可以对countsbeneficiary_name进行排序。
  • @QuangHoang 这行得通!但是我如何仅对受益人姓名进行升序排序。当我尝试提升 true 时,它​​也会计数。
  • 传递一个数组ascending=[True, False]:
  • 非常感谢!你想发布这个答案吗?所以我可以接受它是正确的。

标签: python pandas dataframe numpy sorting


【解决方案1】:

受这个相关问题的启发:

import pandas as pd

df = pd.DataFrame({'id': range(9), 'cat': list('ababaacdc'), 'benef': list('uuuuiiiii')})

print(df)
#    id cat benef
# 0   0   a     u
# 1   1   b     u
# 2   2   a     u
# 3   3   b     u
# 4   4   a     i
# 5   5   a     i
# 6   6   c     i
# 7   7   d     i
# 8   8   c     i

df['cat_count'] = df.groupby(['cat'])['id'].transform('count')

print(df)
#    id cat benef  cat_count
# 0   0   a     u          4
# 1   1   b     u          2
# 2   2   a     u          4
# 3   3   b     u          2
# 4   4   a     i          4
# 5   5   a     i          4
# 6   6   c     i          2
# 7   7   d     i          1
# 8   8   c     i          2

df = df.sort_values(by=['cat_count', 'cat', 'benef'], ascending=False)

print(df)
#    id cat benef  cat_count
# 0   0   a     u          4
# 2   2   a     u          4
# 4   4   a     i          4
# 5   5   a     i          4
# 6   6   c     i          2
# 8   8   c     i          2
# 1   1   b     u          2
# 3   3   b     u          2
# 7   7   d     i          1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2013-10-09
    • 2019-04-12
    • 2013-10-28
    • 2014-03-21
    • 2012-08-21
    相关资源
    最近更新 更多