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

如何遍历DataFrame,将同商品总数量归集至首个出现的门店?

实现商品数量归集到首次出现门店的方法

示例数据

先构造一个符合场景的DataFrame用于演示:

import pandas as pd

data = {
    'Store': ['A', 'B', 'A', 'C', 'B'],
    'Item': ['Fish', 'Fish', 'Beef', 'Beef', 'Chicken'],
    'Qty': [10, 6, 8, 5, 3]
}
df = pd.DataFrame(data)

方法一:保留所有行,仅首次出现的门店显示总数量

这种方式保留原DataFrame的所有行,但仅每个商品首次出现的门店行显示总数量,其余同商品行的数量设为0:

# 1. 计算每个商品的总数量
item_totals = df.groupby('Item')['Qty'].sum()

# 2. 标记每个商品的首次出现行
df['is_first'] = ~df.duplicated('Item', keep='first')

# 3. 更新数量:首次行用总数量,其他行设为0
df['Qty'] = df.apply(lambda row: item_totals[row['Item']] if row['is_first'] else 0, axis=1)

# 可选:删除标记列
df = df.drop('is_first', axis=1)

执行后结果:

StoreItemQty
AFish16
BFish0
ABeef13
CBeef0
BChicken3

方法二:仅保留每个商品首次出现的门店行,数量替换为总和

如果不需要保留多余行,只保留每个商品首次出现的门店,并将数量更新为该商品的总数量:

# 1. 计算每个商品的总数量
item_totals = df.groupby('Item')['Qty'].sum()

# 2. 获取每个商品首次出现的行(保留原顺序)
result_df = df.groupby('Item').head(1).copy()

# 3. 将数量替换为总数量
result_df['Qty'] = result_df['Item'].map(item_totals)

执行后结果:

StoreItemQty
AFish16
ABeef13
BChicken3

关键说明

  • 两种方法都依赖原DataFrame的顺序判断“首次出现”,不要提前排序,否则会改变首次出现的门店。
  • duplicated('Item', keep='first')标记除首次出现外的所有重复商品行,取反后即为首次出现的行。
  • groupby('Item').head(1)直接提取每个商品在原DataFrame中第一次出现的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:05:05