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

如何在Pandas DataFrame中按USIM计算网店订单平均商品数

按USIM计算网店订单平均商品数量

原始数据

import pandas as pd

data = {
    'USIM': ['1111111', '2199608', '2222222', '4444444', '1111111', '2111111', '2222222', '4444444'],
    'WEBSHOP_ORDER': [0, 0, 0, 0, 1, 1, 1, 1],
    'DEMAND_QTY': [1, 3, 2, 1, 5, 9, 8, 6]
}

df = pd.DataFrame(data)

需求说明

按每个唯一的USIM计算对应的网店订单平均商品数量:

  • USIM为用户唯一标识符
  • WEBSHOP_ORDER代表订单类型(0、1为两类不同订单)
  • DEMAND_QTY是对应订单的商品数量

期望输出

USIM  AVG_ITEMS_IN_WEBSHOP_ORDER
0  1111111                        17.5  # (28+7)/2 *
1  2111111                        28.0
2  2199608                         7.0
3  2222222                        17.5
4  4444444                        17.5

# * 28是WEBSHOP_ORDER == 1时的全局总商品数
#   7是WEBSHOP_ORDER == 0时的全局总商品数

实现代码及逻辑

步骤1:计算两类订单的全局总商品数

先统计所有订单中,两类订单各自的总商品数量:

sum_order0 = df[df['WEBSHOP_ORDER'] == 0]['DEMAND_QTY'].sum()
sum_order1 = df[df['WEBSHOP_ORDER'] == 1]['DEMAND_QTY'].sum()

步骤2:按USIM计算平均值

对每个USIM,统计它涉及的订单类型数量,再结合全局总商品数计算平均值:

# 按USIM和订单类型分组,标记该USIM是否拥有对应类型的订单
grouped = df.groupby(['USIM', 'WEBSHOP_ORDER']).size().unstack(fill_value=0)

# 计算平均值:(涉及的订单类型总商品数之和) / 涉及的订单类型数量
grouped['AVG_ITEMS_IN_WEBSHOP_ORDER'] = (
    grouped[0] * sum_order0 + grouped[1] * sum_order1
) / (grouped[0] + grouped[1])

# 整理成目标格式
result = grouped[['AVG_ITEMS_IN_WEBSHOP_ORDER']].reset_index()
print(result)

逻辑解释

  1. 先算出全局两类订单的总商品数:sum_order0=7,sum_order1=28
  2. 分组后得到每个USIM拥有的订单类型情况(比如1111111同时拥有0和1两类订单)
  3. 平均值计算规则:若USIM涉及n种订单类型,就把对应类型的全局总商品数相加后除以n
  4. 最后重置索引,得到与期望一致的输出结构

运行结果

执行代码后输出:

USIM  AVG_ITEMS_IN_WEBSHOP_ORDER
0  1111111                        17.5
1  2111111                        28.0
2  2199608                         7.0
3  2222222                        17.5
4  4444444                        17.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:05:18