You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中对Kickstarter数据集实现分组后的主次排序?

解决Kickstarter数据集类别排序问题

我来帮你搞定这个排序需求!你想要的是先按每个主类别的总项目数进行主排序(也就是不管状态,哪个类别整体最受欢迎排前面),然后在同一个类别下,再按每个状态的项目数进行二次排序对吧?

你原来的代码ks.groupby(['main_category','state']).count().sort_values('name', ascending=False)只是对每个(主类别+状态)的组合计数单独排序,没有考虑类别整体的总数量,所以才会不符合预期。下面是具体的实现步骤:

步骤1:计算每个主类别的总项目数

首先我们需要先算出每个main_category的总项目数,作为后续排序的主依据:

import pandas as pd

# 计算每个主类别的总项目数,并重命名列名为total_count
total_category_counts = ks.groupby('main_category')['name'].count().rename('total_count')

步骤2:按类别+状态分组并合并总计数

接下来我们按main_category和state分组统计每个组合的项目数,然后把刚才算的总计数合并进来:

# 按类别+状态分组统计,重命名列名为state_count并转为DataFrame
grouped_data = ks.groupby(['main_category', 'state'])['name'].count().rename('state_count').reset_index()

# 合并总计数列
grouped_data = grouped_data.merge(total_category_counts, on='main_category')

步骤3:按需求排序

现在我们就可以按照「总计数降序 → 状态计数降序」的规则排序了。如果还想指定状态的优先级(比如你关心的successful→failed→cancelled顺序),可以把state转为分类类型:

# 可选:指定状态的排序优先级,让successful排在最前面
grouped_data['state'] = pd.Categorical(
    grouped_data['state'],
    categories=['successful', 'failed', 'cancelled'],
    ordered=True
)

# 执行排序:先按total_count降序,再按state_count降序,最后按指定的state顺序
sorted_result = grouped_data.sort_values(
    by=['total_count', 'state_count', 'state'],
    ascending=[False, False, True]
)

# 查看结果
print(sorted_result.head(10))

如果不需要指定状态的固定顺序,直接按状态计数降序即可:

sorted_result = grouped_data.sort_values(
    by=['total_count', 'state_count'],
    ascending=[False, False]
)

这样得到的结果就会先把整体项目最多的主类别排在前面,同一个类别下,项目数多的状态会更靠前,完全符合你的需求!

内容的提问来源于stack exchange,提问作者dr jerry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:05:28