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

在Pandas分组DataFrame中自定义算术聚合及.agg函数使用问题

解决方案:按分组计算总销售额与月均销售额(按月份数平均)

针对你需要按Name和Fiscal_Year分组,计算总销售额及按月份数量平均的月均销售额需求,以下是两种可行的实现方式:

方法一:分步聚合计算(推荐,逻辑清晰)

先分组计算总销售额和分组内的唯一月份数,再通过列运算得到月均销售额:

import pandas as pd

# 加载你的数据
df = pd.DataFrame( {
    'Name': ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'],
    'day': [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2],
    'month': ['Apr', 'Apr', 'Apr', 'Apr', 'May', 'May', 'May', 'May', 'Apr', 'Apr', 'Apr', 'Apr', 'May', 'May', 'May', 'May'],
    'Fiscal_Year': ['FY2023-24', 'FY2023-24', 'FY2024-25', 'FY2024-25', 'FY2023-24', 'FY2023-24', 'FY2024-25', 'FY2024-25',
                    'FY2023-24', 'FY2023-24', 'FY2024-25', 'FY2024-25', 'FY2023-24', 'FY2023-24', 'FY2024-25', 'FY2024-25'],
    'sale': [100, 222, 333, 444, 200, 111, 555, 366, 666, 777, 300, 345, 756, 896, 452, 365]
})

# 分组聚合:计算总销售额和分组内唯一月份数
grouped_df = df.groupby(['Name', 'Fiscal_Year'], as_index=False).agg(
    Total_Sales=('sale', 'sum'),
    Month_Count=('month', 'nunique')
)

# 计算月均销售额:总销售额 ÷ 唯一月份数
grouped_df['Mavg'] = grouped_df['Total_Sales'] / grouped_df['Month_Count']

# 可选:删除中间辅助列Month_Count
# grouped_df = grouped_df.drop('Month_Count', axis=1)

print(grouped_df)

输出结果:

Name Fiscal_Year  Total_Sales  Month_Count   Mavg
0    a    FY2023-24          633            2  316.5
1    a    FY2024-25         1707            2  853.5
2    b    FY2023-24         3105            2 1552.5
3    b    FY2024-25         1462            2  731.0

方法二:自定义聚合函数

直接在agg中使用自定义函数,一次性计算月均销售额:

import pandas as pd

# 定义自定义聚合函数
def monthly_average(group):
    total = group['sale'].sum()
    unique_months = group['month'].nunique()
    return total / unique_months

# 分组聚合
grouped_df = df.groupby(['Name', 'Fiscal_Year'], as_index=False).agg(
    Total_Sales=('sale', 'sum'),
    Mavg=('sale', monthly_average)
)

print(grouped_df)

关键问题说明

  • 你之前使用('Sale', 'mean')得到的是日均销售额(总销售额除以分组内的天数/行数),而非需求的月均销售额。
  • 直接对整个DataFrame执行df['sale'].sum()/df['month'].nunique()无法实现分组计算,因为它没有考虑Name和Fiscal_Year的分组维度,仅计算全局平均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:42:11