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

如何在Python Pandas中分组统计、排序并获取Top10演员(按账号数)

解决Pandas按演员分组统计账号数并取Top10的问题

我来帮你修正这个问题~你原来的代码逻辑有点搞反了,咱们一步步来实现你要的效果,对应你给出的SQL逻辑:SELECT actor_id, COUNT(account_id) FROM table GROUP BY actor_id ORDER BY COUNT(account_id) DESC LIMIT 10,用Pandas可以这么做:

步骤1:分组统计每个演员的账号数量

首先通过groupby按actor_id分组,然后对account_id计数(因为一个演员可能关联多个账号,计数就能得到每个演员的账号总数):

# 分组统计,得到每个actor_id对应的账号数
account_count = df.groupby('actor_id')['account_id'].count().reset_index(name='account_num')

这里reset_index(name='account_num')是把分组后的索引(actor_id)转成列,同时给计数列起个清晰的名字account_num,方便后续操作。

步骤2:按账号数降序排序并取Top10

接下来对统计结果按account_num降序排列,然后取前10条:

# 降序排序,取账号最多的Top10演员
top10_actors = account_count.sort_values(by='account_num', ascending=False).head(10)

完整代码示例

把两步合起来,完整可运行的代码如下:

# 分组统计每个演员的账号数量
account_count = df.groupby('actor_id')['account_id'].count().reset_index(name='account_num')
# 按账号数降序排序,取Top10
top10_actors = account_count.sort_values(by='account_num', ascending=False).head(10)
print(top10_actors)

为什么你的原代码不对?

你原来的代码:

df['count'] = df['actor_id'].map(df['account_id'].value_counts()) 
df.sort_index('count', ascending=False)

这里的核心问题是逻辑颠倒了:df['account_id'].value_counts()统计的是每个账号被关联的演员次数,而非每个演员拥有的账号数,再用actor_id去映射这个结果,自然得不到你想要的统计数据。

如果你想直接在原DataFrame里添加计数列,也可以用这种方式:

# 先统计每个actor_id的账号数并命名列
actor_account_count = df.groupby('actor_id')['account_id'].count().rename('account_num')
# 把计数列合并回原DataFrame
df_with_count = df.merge(actor_account_count, on='actor_id', how='left')
# 去重(每个演员只保留一行)后排序取Top10
top10_actors = df_with_count.drop_duplicates('actor_id').sort_values(by='account_num', ascending=False).head(10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:50:31