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

如何用Python按产品类别基于递归数据生成衍生列inventory与oh_avg

问题描述

我有一个包含code、inbound、sell字段的DataFrame,希望按产品类别添加inventory和oh_avg列,计算逻辑如下:

  • inventory:当前行inbound - sell加上上一行同产品的inventory,首行则直接为inbound - sell
  • oh_avg:当前行inventory除以该产品截至当前行的所有历史sell的均值

示例数据如下:

idx product inbound sell inventory oh_avg
1   1       6       3     3        1         (3/mean(3))
2   1       4       6     1        0.22      (1/mean(3+6))
3   1       4       0     5        1.67      (5/mean(3+6+0))
4   2       20      10    10       1         (10/mean(10))
5   2       10      5     15       2         (15/mean(10+5))
实现方案

通过Pandas的分组与累计计算功能即可实现需求,代码如下:

import pandas as pd

# 构造示例数据(实际使用时替换为你的数据源)
data = {
    'idx': [1,2,3,4,5],
    'product': [1,1,1,2,2],
    'inbound': [6,4,4,20,10],
    'sell': [3,6,0,10,5]
}
df = pd.DataFrame(data)

# 1. 计算inventory:按产品分组后,对(inbound - sell)做累计求和
df['inventory'] = df.groupby('product').apply(
    lambda x: (x['inbound'] - x['sell']).cumsum()
).reset_index(level=0, drop=True)

# 2. 计算oh_avg:先求每个产品截至当前行的sell累计均值,再用inventory除以该均值
df['sell_cum_mean'] = df.groupby('product')['sell'].expanding().mean().reset_index(level=0, drop=True)
df['oh_avg'] = df['inventory'] / df['sell_cum_mean']

# 可选:保留两位小数,与示例格式对齐
df['oh_avg'] = df['oh_avg'].round(2)

print(df)

代码说明

  • inventory计算:对每个产品组的inbound - sell差值做累计求和,自动实现"当前行差值+上一行库存"的逻辑,首行直接取差值
  • 累计均值计算:expanding().mean()会对每个产品组从第一行到当前行的sell值计算均值,正好匹配"所有历史sales均值"的要求
  • 最后通过除法得到oh_avg,可选保留两位小数让结果更贴合示例

运行后输出结果与示例一致:

idx  product  inbound  sell  inventory  sell_cum_mean  oh_avg
0    1        1        6     3          3            3.0    1.00
1    2        1        4     6          1            4.5    0.22
2    3        1        4     0          5            3.0    1.67
3    4        2       20    10         10           10.0    1.00
4    5        2       10     5         15            7.5    2.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:06:27