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

在Pandas中实现基于店铺的DataFrame地区数值分组汇总

问题描述

原始DataFrame如下:

typeItem    store   region      amountItems
0   Drink       Toncat  Colorado    100
1   Food        Toncat  Colorado    100
2   Toy         Toncat  Colorado    100
3   Cloth       Toncat  Colorado    100
4   Car         Bent    Mount       10
5   Moto        Bent    Mount       10
6   Bike        Timo    Mount       5
7   Fork        Logo    Iggo        50

已知每个地区包含多个店铺,amountItems字段已是各店铺的聚合值。需要按地区分组,对不同店铺的amountItems求和,生成新字段amountItemsRegion,期望输出如下:

typeItem    store   region      amountItems amountItemsRegion
0   Drink       Toncat  Colorado    100         100
1   Food        Toncat  Colorado    100         100
2   Toy         Toncat  Colorado    100         100 
3   Cloth       Toncat  Colorado    100         100
4   Car         Bent    Mount       10          15
5   Moto        Bent    Mount       10          15
6   Bike        Timo    Mount       5           15
7   Fork        Logo    Iggo        50          50

注:Colorado地区仅1家店铺,求和值为该店铺的数值;Mount地区有2家店铺,需对不同店铺的amountItems求和(10+5)。

实现方案

可以通过以下两种Pandas方式实现:

方式一:分组求和后合并

  1. 先按region和store分组,提取每个店铺在对应地区的唯一amountItems值(因同一店铺的amountItems为聚合值,所有行数值一致);
  2. 对每个region下的店铺amountItems求和,得到地区级总和;
  3. 将求和结果合并回原始DataFrame。

代码示例:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'typeItem': ['Drink', 'Food', 'Toy', 'Cloth', 'Car', 'Moto', 'Bike', 'Fork'],
    'store': ['Toncat', 'Toncat', 'Toncat', 'Toncat', 'Bent', 'Bent', 'Timo', 'Logo'],
    'region': ['Colorado', 'Colorado', 'Colorado', 'Colorado', 'Mount', 'Mount', 'Mount', 'Iggo'],
    'amountItems': [100, 100, 100, 100, 10, 10, 5, 50]
})

# 按地区+店铺取唯一值后,按地区求和
region_store_sum = df.groupby(['region', 'store'])['amountItems'].first().groupby('region').sum().reset_index(name='amountItemsRegion')

# 合并回原始数据
df = df.merge(region_store_sum, on='region', how='left')

print(df)

方式二:去重+transform映射

先去掉同一地区同一店铺的重复行,再按地区对amountItems求和,最后用transform将求和结果映射到原始DataFrame的每一行,一步生成目标字段。

代码示例:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'typeItem': ['Drink', 'Food', 'Toy', 'Cloth', 'Car', 'Moto', 'Bike', 'Fork'],
    'store': ['Toncat', 'Toncat', 'Toncat', 'Toncat', 'Bent', 'Bent', 'Timo', 'Logo'],
    'region': ['Colorado', 'Colorado', 'Colorado', 'Colorado', 'Mount', 'Mount', 'Mount', 'Iggo'],
    'amountItems': [100, 100, 100, 100, 10, 10, 5, 50]
})

# 生成amountItemsRegion字段
df['amountItemsRegion'] = df.drop_duplicates(['region', 'store']).groupby('region')['amountItems'].transform('sum')

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:18:33