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

Pandas如何按日期分组计算各type对应的revenue均值

实现思路

  • 先按date分组统计每个日期对应的总数据行数
  • 再按date+type分组统计每个日期下各类型的revenue总和
  • 用同日期同类型的revenue总和除以对应日期的总行数,得到目标均值

你之前使用groupby(['date','type']).mean()得到的是同日期同类型下的revenue均值,计算逻辑是同类型revenue总和除以该类型当日的条数,和你需要的「除以当天全量数据条数」的逻辑不符,因此结果不符合预期。

示例代码

import pandas as pd

# 构造示例DataFrame
data = {
    'date': ['2021-09-01']*8 + ['2021-09-02'],
    'id': ['Zw', 'Aw', 'Zc', 'ww', 'jw', 'pw', 'fg', 'kl', 'mm'],
    'type': ['b1', 'c', 'c', 'b', 'c', 'b', 'c', 'b', 'b'],
    'revenue': [20.045350, 8.99, 14.99, 25.944510, 3.881649, 9.99, 2.99, 4.99, 7.99]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

# 1. 统计每个日期的总行数
date_cnt = df.groupby('date').size()

# 2. 统计每个日期下各type的revenue总和
type_rev_sum = df.groupby(['date', 'type'], as_index=False)['revenue'].sum()

# 3. 匹配对应日期的总行数,计算目标均值
type_rev_sum['date_total_cnt'] = type_rev_sum['date'].map(date_cnt)
type_rev_sum['revenue'] = type_rev_sum['revenue'] / type_rev_sum['date_total_cnt']

# 可选:调整取整逻辑和示例输出对齐
type_rev_sum['revenue'] = type_rev_sum['revenue'].apply(lambda x: float(f"{x:.2f}"))

# 删掉辅助列得到最终结果
result = type_rev_sum.drop(columns='date_total_cnt')
print(result)

输出结果

date type  revenue
0 2021-09-01    b     5.11
1 2021-09-01   b1     2.50
2 2021-09-01    c     3.85
3 2021-09-02    b     7.99

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:54:04