如何在熊猫中按值计数对列进行排序

Posted

技术标签:

【中文标题】如何在熊猫中按值计数对列进行排序【英文标题】:How to sort column by value counts in pandas 【发布时间】:2022-01-13 13:27:08 【问题描述】:

我想在 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]: 非常感谢!你想发布这个答案吗?所以我可以接受它是正确的。 【参考方案1】:

受这个相关问题的启发:

Create column of value_counts in Pandas dataframe
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

【讨论】:

以上是关于如何在熊猫中按值计数对列进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据库表中按字母顺序对列进行排序? [关闭]

如何在 SQL Server 中按日期列排序的组中对列进行排名

如何在mysql中按值排序

如何在PHP中按值对对象数组进行排序

在 JavaScript 中按值对字典进行排序

如何按值对计数器进行排序? - Python