在分组数据框中添加自定义算术聚合以及 pandas/python 中的 .agg 函数

问题描述 投票:0回答:1

我是 R 用户,现在也在从头开始学习 Python。

我有这个示例数据框。

Sample_df

我想按名称和 Fiscal_year 对 df 进行分组,然后添加销售额总和以及每个会计年度每种产品的月平均销售额。

均值函数将销售总额除以天数,但我希望销售总额除以不同的月份数。

下面是我正在寻找的输出。

Output_df

任何帮助将不胜感激。

谢谢你。

我尝试了以下方法

df1 = df.groupby(['Name', 'Fiscal_Year'], as_index=False)
df1 = df1.agg(Total_Sales = ('sale', 'sum'), Mavg = ('Sale', 'mean'))
df

我还尝试了多种算术方法,例如: df['Mavg] = df['销售'].sum()/df['月份].nunique()

这可能可以单独工作,但我不能将其应用于分组。

可重复输入:

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, 555, 756, 896, 452, 365]
})
python pandas dataframe mean arithmetic-expressions
1个回答
0
投票

您首先需要聚合包括月份来计算每月总和,然后执行聚合:

out = (df
   .groupby(['Name', 'month', 'Fiscal_Year'], as_index=False)['sale'].sum()
   .groupby(['Name', 'Fiscal_Year'], as_index=False)
   .agg(Total_Sales = ('sale', 'sum'), Mavg = ('sale', 'mean'))
)

输出:

  Name Fiscal_Year  Total_Sales    Mavg
0    a   FY2023-24          633   316.5
1    a   FY2024-25         1698   849.0
2    b   FY2023-24         3095  1547.5
3    b   FY2024-25         1672   836.0
© www.soinside.com 2019 - 2024. All rights reserved.