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

Pandas DataFrame按Store_Code分组实现多列自定义聚合操作问询

在Pandas中实现多列自定义分组聚合(类似SQL多聚合函数)

没问题,这在Pandas里完全可以轻松实现!你需要用到groupby配合agg()方法——它支持给不同列指定不同的聚合规则,完美对应你要的SQL式多列聚合需求。

先还原你的示例数据集

首先我们把你给出的数据转换成Pandas DataFrame:

import pandas as pd

data = pd.DataFrame({
    'Store_Code': [1, 2, 2, 1, 1],
    'Brand_Code': [18, 17, 17, 17, 18],
    'Sales_Price': [28.00, 105.33, 65.33, 30.67, 6.67]
})

实现自定义分组聚合

我们的目标是:

  • 按Store_Code分组
  • 对Brand_Code取出现频率最高的值(众数)
  • 对Sales_Price可以选择均值、求和等聚合操作(这里以均值为例,你可以按需替换)

直接用agg()方法,传入一个字典来指定每列的聚合规则:

# 定义聚合规则:键是列名,值是对应的聚合逻辑
aggregation_rules = {
    # 取Brand_Code的众数(如果有多个众数,取第一个)
    'Brand_Code': lambda x: x.mode().iloc[0],
    # 对Sales_Price取均值,换成'sum'就是求和,按需调整
    'Sales_Price': 'mean'
}

# 执行分组聚合,as_index=False让Store_Code作为普通列而不是索引
result = data.groupby('Store_Code', as_index=False).agg(aggregation_rules)

print(result)

运行结果

输出会是:

Store_Code  Brand_Code  Sales_Price
0           1          18    21.780000
1           2          17    85.330000

额外说明

  1. 关于Brand_Code的众数处理:如果某个Store下有多个Brand出现次数相同(比如Store1的Brand18和17各出现2次),x.mode().iloc[0]会取第一个出现的众数。如果你想保留所有众数,去掉.iloc[0]即可,结果会以列表形式返回。
  2. Sales_Price的其他聚合方式:你可以把'mean'换成'sum'、'max'、'min',甚至自定义lambda函数(比如lambda x: x.sum()/len(x)*1.1)。
  3. 保留Sales_Price原值:如果需要保留每个分组下的所有Sales_Price明细,把对应的规则改成lambda x: list(x)即可,结果列会是包含所有原值的列表。

这种方式完全对应你想要的SQL多聚合逻辑,比单一的sum()灵活太多啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:16