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

如何在GroupBy中独立聚合字符串字段并关联其他统计结果

问题描述

我有如下数据:

df1

Store(门店)owner(店主)
Store1A
Store1B
Store2B
Store2C

df2

Store(门店)Sold_Item(售出商品)Price(价格)
Store1Apple2
Store1Orange3
Store1Apple2
Store2Apple3
StoreBanana2

我期望得到如下格式的结果:

Store(门店)Owners(店主)Num_Sales(销售数量)Revenue(营收)
Store1A37
B
Store2B25
C

我尝试了以下代码:

df = df1.merge(df2, how='inner', on='Store')
df_stats = df.groupby(['Store']).agg({"Sold_Item": np.count, "Price": 'sum'})

但不知道如何处理Owner字段,恳请提供解决方案。

解决方案

要实现目标格式,可按以下步骤操作:

  • 清理并计算门店销售统计:先修正df2中可能的门店名称错误(最后一行Store应为Store2,否则会被过滤),再按门店聚合计算销售数量和营收:
import pandas as pd
import numpy as np

# 修正df2的门店名称错误(按需调整)
df2.loc[df2['Store(门店)'] == 'Store', 'Store(门店)'] = 'Store2'

# 计算每个门店的销售统计
store_stats = df2.groupby('Store(门店)').agg(
    Num_Sales=('Sold_Item(售出商品)', 'count'),
    Revenue=('Price(价格)', 'sum')
).reset_index()
  • 合并店主与统计数据并处理格式:将店主表和统计表关联,然后让同一门店仅第一行显示门店名称,其余行留空:
# 合并数据
result = df1.merge(store_stats, on='Store(门店)', how='left')

# 处理门店列:重复门店名置空
result['Store(门店)'] = result['Store(门店)'].mask(result['Store(门店)'].duplicated(), '')

# 重命名列匹配期望结果
result = result.rename(columns={'owner(店主)': 'Owners(店主)'})
  • 调整列顺序:
# 调整为目标列顺序
result = result[['Store(门店)', 'Owners(店主)', 'Num_Sales(销售数量)', 'Revenue(营收)']]

运行后得到的result就完全符合你想要的格式。如果df2中Store是有效门店名,由于df1中无对应店主,inner join后会被排除,不影响现有门店的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:33:23