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

如何使用Pandas按用户百分位数分组统计评论总数(替代自定义循环实现)

我来帮你搞定这个问题!你想要的统计效果完全可以用Pandas的工具链实现,不用自己写循环,代码更简洁易维护~

核心问题在于:你需要的是按用户数量的百分位数区间来统计(比如前10%的用户群体,不管他们的评论数多少,只要是用户数量占前10%),而不是按评论数的数值分位数来分箱。之前用qcut没成功,大概率是直接对count列分箱了,那会按评论数的数值区间划分,和你的需求不符。

下面是具体的实现步骤,完全贴合你的需求:

步骤1:先对用户按评论数降序排序

首先把数据按用户的评论数(count列)从多到少排序,这样最活跃的用户会排在前面,方便后续按用户数量划分百分位数区间:

# 假设你的数据集存储在DataFrame df中
sorted_df = df.sort_values(by='count', ascending=False)

步骤2:用qcut按用户数量划分百分位数区间

这里我们用排序后的索引来分箱(因为索引是连续的,能保证每个区间的用户数量相等),同时设置对应的区间标签:

# 定义要划分的区间数量,比如你之前的5个区间(每个占20%用户)
n_bins = 5
# 生成对应的标签,比如"前100%-80%用户"对应最活跃的20%用户
labels = [f'前{100 - i*20}%-{100 - (i+1)*20}%用户' for i in range(n_bins)]

# 给每个用户标记所属的百分位数区间
sorted_df['user_percentile'] = pd.qcut(
    x=sorted_df.index,  # 用索引来等分用户数量
    q=n_bins,           # 分成n_bins个等用户数的区间
    labels=labels
)

步骤3:分组统计每个区间的评论总数

按标记的区间分组,对count列求和就能得到每个区间的总评论数:

# 分组求和,得到每个区间的评论总数
percentile_count = sorted_df.groupby('user_percentile')['count'].sum().reset_index()

步骤4:格式化输出成你想要的样式

最后把结果转成你期望的“X%-Y%用户:XXK条评论”格式:

for _, row in percentile_count.iterrows():
    # 把总数转换成K单位(保留整数)
    total_k = f'{row["count"] / 1000:.0f}K'
    print(f'# {row["user_percentile"]}:{total_k}条评论')

扩展:如果要划分10个区间(每个10%用户)

只需要调整n_bins和标签生成逻辑即可:

n_bins = 10
labels = [f'前{100 - i*10}%-{100 - (i+1)*10}%用户' for i in range(n_bins)]

用这个方法得到的结果和你之前循环实现的完全一致,而且代码更简洁,还能灵活调整区间数量~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:52:37