如何用Pandas按App ID及Star分组计算开发者回复评论占比
百万行Pandas DataFrame分组计算开发者回复占比的实现方法
需求说明
针对百万行规模的Pandas DataFrame,按App ID分组后,再对每个App ID下的评论按Star(评分)细分,计算每个评分分组中开发者已回复评论的占比。
实现步骤
1. 标记是否有开发者回复
首先识别每条评论是否收到有效开发者回复,需处理空字符串、仅含空白字符(换行、空格)的无效回复:
# 矢量化处理,高效判断有效回复(适合百万行数据,性能优于apply) df['has_reply'] = (df['DeveloperReply'].str.strip() != '').astype(int)
str.strip():去除回复内容首尾的空白字符(包括换行、空格)- 比较结果转为整数
1(有有效回复)或0(无有效回复)
2. 分组计算回复占比
通过groupby按App ID和Star分层分组,统计每组的总评论数与已回复评论数,最终计算占比并格式化为百分比:
# 分组统计并生成百分比结果 result = df.groupby(['App ID', 'Star']).agg( 总评论数=('has_reply', 'count'), 已回复数=('has_reply', 'sum') ).assign( Percentage=lambda x: (x['已回复数'] / x['总评论数'] * 100).round(2).astype(str) + '%' ).reset_index()[['App ID', 'Star', 'Percentage']]
groupby(['App ID', 'Star']):实现先按应用ID分组,再按评分细分的双层分组逻辑agg:一次性统计每组的总评论数(count)和已回复评论数(sum,利用has_reply的1/0特性)assign:计算占比并格式化为带%的字符串,保留两位小数
3. 结果示例
针对提供的示例数据,运行后得到的结果如下:
| App ID | Star | Percentage |
|---|---|---|
| apple | 3 | 100.0% |
| apple | 4 | 0.0% |
| apple | 5 | 100.0% |
| banana | 1 | 100.0% |
| banana | 5 | 100.0% |
| mango | 1 | 100.0% |
| mango | 5 | 100.0% |
性能优化建议
针对百万行规模的数据,优先使用矢量化操作(如str.strip())而非apply,避免逐行处理带来的性能损耗;若内存紧张,可考虑使用dask.dataframe进行并行分块处理。
内容的提问来源于stack exchange,提问作者Mystic
相关产品推荐
相关产品推荐

