如何在熊猫中按值计数对列进行排序
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')
分配计数。然后你可以对counts
和beneficiary_name
进行排序。
@QuangHoang 这行得通!但是我如何仅对受益人姓名进行升序排序。当我尝试提升 true 时,它也会计数。
传递一个数组ascending=[True, False]
:
非常感谢!你想发布这个答案吗?所以我可以接受它是正确的。
【参考方案1】:
受这个相关问题的启发:
Create column of value_counts in Pandas dataframeimport 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
【讨论】:
以上是关于如何在熊猫中按值计数对列进行排序的主要内容,如果未能解决你的问题,请参考以下文章