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

如何计算DataFrame中各品类的日均值与月均值?

实现步骤

首先确保你已安装pandas库,然后按以下步骤操作:

1. 导入库并构造初始DataFrame

import pandas as pd

# 构造你的原始数据
data = {
    'date': ['29/4/2022', '30/4/2022', '30/4/2022', '1/5/2022', '1/5/2022', '1/5/2022', '1/6/2022', '1/6/2022', '1/6/2022'],
    'sales': [2, 5, 1, 1, 8, 4, 7, 9, 5],
    'cat': ['a', 'a', 'b', 'a', 'b', 'c', 'a', 'b', 'c']
}

df = pd.DataFrame(data)

2. 转换日期格式

将date列转为datetime类型,方便后续按日、月分组计算:

df['date'] = pd.to_datetime(df['date'], dayfirst=True)

3. 计算日均值(daily_avg)

常规日均值(同分类当日sales平均)

指每个分类(cat)在同一天内的sales平均值,若某分类当日仅一条数据,均值即为该数据本身:

# 按分类和日期分组计算均值
daily_avg = df.groupby(['cat', df['date'].dt.date])['sales'].mean().reset_index(name='daily_avg')
# 将结果合并回原DataFrame
df = df.merge(daily_avg, left_on=['cat', df['date'].dt.date], right_on=['cat', 'date'], how='left')
# 清理重复的date列
df = df.drop('date_y', axis=1).rename(columns={'date_x': 'date'})

累计日均值(截止到当前行的分类sales平均)

如果需要的是从该分类第一条数据到当前行的累计平均值,替换为以下代码:

df['daily_avg'] = df.groupby('cat')['sales'].expanding().mean().reset_index(level=0, drop=True)

4. 计算月均值(monthly_avg)

常规月均值(同分类当月sales平均)

指每个分类(cat)在同一月份内的sales平均值:

# 按分类和月份(年-月)分组计算均值
monthly_avg = df.groupby(['cat', df['date'].dt.to_period('M')])['sales'].mean().reset_index(name='monthly_avg')
# 将结果合并回原DataFrame
df = df.merge(monthly_avg, left_on=['cat', df['date'].dt.to_period('M')], right_on=['cat', 'date'], how='left')
# 清理重复列
df = df.drop('date_y', axis=1).rename(columns={'date_x': 'date'})

累计月均值(截止到当前行的分类当月sales平均)

如果需要的是该分类当月从第一条数据到当前行的累计平均值,替换为以下代码:

df['monthly_avg'] = df.groupby(['cat', df['date'].dt.to_period('M')])['sales'].expanding().mean().reset_index(level=[0,1], drop=True)

5. 调整格式和列顺序

将日期转回dd/mm/yyyy格式,并调整列顺序匹配目标格式:

# 转换日期格式
df['date'] = df['date'].dt.strftime('%d/%m/%Y')
# 调整列顺序
df = df[['date', 'sales', 'cat', 'daily_avg', 'monthly_avg']]

最终结果示例

执行完上述步骤后,若使用常规日/月均值,结果如下:

date  sales cat  daily_avg  monthly_avg
0  29/04/2022      2   a        2.0     3.500000
1  30/04/2022      5   a        5.0     3.500000
2  30/04/2022      1   b        1.0     1.000000
3  01/05/2022      1   a        1.0     1.000000
4  01/05/2022      8   b        8.0     8.000000
5  01/05/2022      4   c        4.0     4.000000
6  01/06/2022      7   a        7.0     7.000000
7  01/06/2022      9   b        9.0     9.000000
8  01/06/2022      5   c        5.0     5.000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:57:26