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

Pandas分组保留列:按created_at取quantity最大值并匹配对应category

按日期分组获取最大quantity对应分类的实现方案

你的现有代码完成了按created_at和category的聚合统计,但还没实现按created_at单独分组,提取每个日期下quantity总和最大的分类及对应数值的需求,以下是两种可行的实现方式:

方法一:利用idxmax筛选最大行

先完成聚合,再通过分组找到每个日期下quantity最大的行索引,最终筛选目标数据:

# 第一步:按日期和分类聚合,得到各分类的统计值
agg_tb = (merge_all.groupby(["created_at", "category"])
         .agg({ 
             "buyer_id":"count", 
             "quantity":"sum",
             "total":"sum"
             })
         .reset_index())

# 第二步:按created_at分组,获取每个组内quantity最大的行索引
max_row_indices = agg_tb.groupby("created_at")["quantity"].idxmax()

# 第三步:筛选出目标数据,保留需要的三列
result_tb = agg_tb.loc[max_row_indices, ["created_at", "category", "quantity"]]

方法二:利用rank标记排名筛选

通过给每个日期组内的quantity排名,直接提取排名第一的行:

# 先完成聚合(和方法一第一步一致)
agg_tb = (merge_all.groupby(["created_at", "category"])
         .agg({ 
             "buyer_id":"count", 
             "quantity":"sum",
             "total":"sum"
             })
         .reset_index())

# 给每个created_at组内的quantity按降序排名,method="first"避免并列值冲突
agg_tb["rank"] = agg_tb.groupby("created_at")["quantity"].rank(ascending=False, method="first")

# 筛选排名为1的行,保留目标列
result_tb = agg_tb[agg_tb["rank"] == 1][["created_at", "category", "quantity"]]

两种方法都能得到你需要的结果:每个created_at对应唯一一行,该行是该日期下quantity总和最大的category及对应数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:27:24