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

Pandas中对聚合值二次聚合返回错误结果的技术问题咨询

解决Pandas二次聚合返回错误结果的问题

嘿,我来帮你搞定这个二次聚合的坑!首先咱们得先揪出问题根源:你说的错误结果,大概率是第一次聚合时没处理好重复交易记录,或者聚合的维度没选对。结合你的场景(重复交易、关联门店),我给你梳理清楚正确的步骤和代码:

先明确核心逻辑

你的需求是计算交易的平均值,需要先求和再算均值——这里的正确逻辑应该是:

  • 第一步:先把重复的同一交易合并,对每条唯一交易的销售额求和(毕竟同一条交易多次出现在数据里,总不能重复算吧)
  • 第二步:基于这些唯一交易的销售额,再去计算平均值;如果是要算「各门店的平均交易额」,那就是先按门店+交易聚合,再按门店算均值。

具体代码实现

场景1:计算所有唯一交易的平均销售额

假设你的数据里有唯一标识交易的字段(比如TXN_ID,交易ID),按这个字段聚合就对了:

import pandas as pd

# 你的原有预处理代码,我帮你规整了下
txt_data = pd.read_csv("./TestDataSource/txn.csv", sep=';')
txt_data = txt_data.replace({',': '.'}, regex=True)
txt_data['SALES'] = pd.to_numeric(txt_data['SALES'])

# 第一步:按唯一交易ID聚合,得到每条交易的总销售额
unique_txns = txt_data.groupby('TXN_ID')['SALES'].sum().reset_index()

# 第二步:计算所有唯一交易的平均销售额
avg_txn_sales = unique_txns['SALES'].mean()
print(f"所有唯一交易的平均销售额:{avg_txn_sales}")

场景2:计算各门店的平均交易额

如果你的目标是看每个门店里,单条交易的平均销售额,那就要先按「门店+交易ID」聚合,再按门店算均值:

# 第一步:按门店+交易ID聚合,得到每个门店下每条交易的总销售额
store_txns = txt_data.groupby(['STORE', 'TXN_ID'])['SALES'].sum().reset_index()

# 第二步:按门店聚合,计算每个门店的平均交易额
store_avg_txn = store_txns.groupby('STORE')['SALES'].mean().reset_index()
print("各门店的平均交易额:")
print(store_avg_txn)

为啥之前会出错?

我猜你之前可能犯了这两个错误之一:

  1. 直接按门店聚合总销售额,然后求均值——这得到的是门店的平均总销售额,根本不是交易的平均值,完全是两个概念;
  2. 第一次聚合没针对唯一交易,重复交易被多次计算,导致二次聚合的均值严重失真。

比如这种错误做法一定要避开:

# ❌ 错误示例:得到的是门店平均总销售额,不是交易平均值
wrong_avg = txt_data.groupby('STORE')['SALES'].sum().mean()

额外验证小技巧

你可以先核对下数据维度,确保聚合逻辑没问题:

# 查看原始数据的总记录数(含重复交易)
print(f"原始数据总记录数:{len(txt_data)}")
# 查看唯一交易的数量
print(f"唯一交易数:{txt_data['TXN_ID'].nunique()}")
# 确认唯一门店数(你说的30个)
print(f"唯一门店数:{txt_data['STORE'].nunique()}")

这样就能确保每一步聚合都在正确的维度上,不会再出现错误结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:50