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

如何使用Pandas GroupBy为每个产品标记销量最高的行

如何使用Pandas GroupBy为每个产品标记销量最高的行

你完全可以用Pandas的groupby配合transform方法来实现这个需求,不用写循环,代码简洁还高效!

先确认下你的原始数据结构:

product_idweek_numbersales
A111000
A122000
A133000
A218000
A224000
A232000

你的目标是添加一列product_max,标记每个产品销量最高的行,最终效果如下:

product_idweek_numbersalesproduct_max
A111000False
A122000False
A133000True
A218000True
A224000False
A232000False

具体实现代码

假设你的DataFrame变量名为df,只需要几行代码就能搞定:

import pandas as pd

# (如果已经有现成的df可以跳过这段数据构造代码)
data = {
    'product_id': ['A1', 'A1', 'A1', 'A2', 'A2', 'A2'],
    'week_number': [1, 2, 3, 1, 2, 3],
    'sales': [1000, 2000, 3000, 8000, 4000, 2000]
}
df = pd.DataFrame(data)

# 核心代码:添加product_max标记列
df['product_max'] = df['sales'] == df.groupby('product_id')['sales'].transform('max')

代码解释

  • df.groupby('product_id')['sales'].transform('max'):按product_id分组后,计算每个产品组的销量最大值,再通过transform把这个最大值“广播”到组内的每一行,生成一个和原DataFrame长度一致的Series。这样每一行都能对应到自己所属产品的最高销量。
  • 用原sales列和这个Series做相等比较,就得到了每行是否是该产品销量最高的标记,结果是布尔值(True/False),正好符合你需要的product_max列的要求。

另外,如果某个产品有多个行销量并列最高(比如同一产品两周销量都是峰值),这个方法也会自动把这些行都标记为True,实用性拉满!

备注:内容来源于stack exchange,提问作者Tyler Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:48:11