如何计算DataFrame中按日期分组的各类型占比的平均值?
解决DataFrame分组计算占比及平均值的问题
我来帮你一步步实现这个需求,用Pandas就能轻松搞定~首先先还原你的原始数据:
import pandas as pd # 初始化原始DataFrame df = pd.DataFrame({ 'date': ['2021-08-12', '2021-08-12', '2021-08-12', '2021-08-12', '2021-08-13', '2021-08-13', '2021-08-13', '2021-08-13'], 'type': ['fail', 'fail', 'win', 'great_win', 'fail', 'win', 'win', 'win'] })
第一步:生成中间结果(按日期计算各type占比)
我们需要先统计每个日期下各type的出现次数,再计算占比,同时补全缺失的type(比如2021-08-13的great_win)并设置占比为0:
# 1. 按date和type分组统计出现次数 counts = df.groupby(['date', 'type']).size().reset_index(name='count') # 2. 计算每个日期的总记录数,进而得到占比 counts['type_perc'] = counts['count'] / counts.groupby('date')['count'].transform('sum') # 3. 补全缺失的type记录,填充占比为0 pivoted = counts.pivot(index='date', columns='type', values='type_perc').fillna(0) middle_result = pivoted.reset_index().melt(id_vars='date', var_name='type', value_name='type_perc') # 查看中间结果 print(middle_result)
运行后你会得到和预期一致的中间结果:
date type type_perc 0 2021-08-12 fail 0.50 1 2021-08-13 fail 0.25 2 2021-08-12 great_win 0.25 3 2021-08-13 great_win 0.00 4 2021-08-12 win 0.25 5 2021-08-13 win 0.75
第二步:计算各type占比的平均值
基于中间结果,直接按type分组求type_perc的平均值即可:
final_result = middle_result.groupby('type')['type_perc'].mean().reset_index() # 查看最终结果 print(final_result)
输出的最终结果如下(小提示:你给出的预期结果中great_win的0.175是笔误,正确平均值应为(0.25+0)/2=0.125):
type type_perc 0 fail 0.375 1 great_win 0.125 2 win 0.500
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

