如何使用pandas计算企业按日期维度的累计加权平均评分
pandas 按企业维度计算累计平均评分的正确方案
原有代码问题
- 第一份代码报错原因:调用
groupby()后得到的是SeriesGroupBy分组对象,未执行聚合操作就直接进行算术运算,类型不匹配触发TypeError。 - 第二份代码结果异常原因:分组维度错误,按
['firm','date']分组后每个分组仅包含单家企业单日的数据,cumsum()无法跨日期累计,因此得不到全周期的累计平均结果。
完整实现代码
步骤1:预处理得到企业单日聚合指标
首先基于原始数据按企业、日期分组,计算单日平均评分和当日评论量,同时确保日期排序正确:
import pandas as pd # 假设原始数据集为raw_df,包含firm、date、reviewer、rate四个字段 # 先将日期字段转为datetime类型,保证排序逻辑正确 raw_df['date'] = pd.to_datetime(raw_df['date']) # 按企业+日期分组聚合 daily_stats = raw_df.groupby(['firm', 'date'], as_index=False).agg( daily_avg = ('rate', 'mean'), daily_cnt = ('rate', 'count') ) # 按企业、日期升序排序,确保累计顺序符合时间逻辑 daily_stats = daily_stats.sort_values(['firm', 'date']).reset_index(drop=True)
步骤2:计算单企业累计平均评分
仅按企业维度分组,用加权累计逻辑计算累计平均:
# 加权累计平均 = (单日平均*单日评论数)累计和 / 评论数累计和 daily_stats['cum_avg_rate'] = ( (daily_stats['daily_avg'] * daily_stats['daily_cnt']).groupby(daily_stats['firm']).cumsum() / daily_stats['daily_cnt'].groupby(daily_stats['firm']).cumsum() )
逻辑说明
累计平均不能直接对单日平均评分做简单累计求平均,因为不同日期的评论量权重不同,必须用加权累计的逻辑计算,才能得到准确的全周期累计平均结果。
内容的提问来源于stack exchange,提问作者Chocolate_coffee
相关产品推荐
相关产品推荐

