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

如何计算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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:48:14