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

Python:按日期和箱号分组,求stage列confidential值的最大计数

解决步骤

1. 先统计每个箱号+日期的'confidential'出现次数

你当前的agg({'stage': 'size'})统计的是该组合下的总行数,不是stage为'confidential'的次数,得先修正这一步:

方法A:先过滤再分组

# 先筛选出stage为confidential的行,再按箱号和日期分组统计数量
conf_count = df[df['stage'] == 'confidential'].groupby(['box', 'date']).agg(confidential_count=('stage', 'size')).reset_index()

方法B:在agg中直接计算特定值的次数

# 不用提前过滤,通过lambda函数统计每组内stage等于confidential的行数
conf_count = df.groupby(['box', 'date']).agg(confidential_count=('stage', lambda x: (x == 'confidential').sum())).reset_index()

2. 提取每个日期的最大次数及对应箱号

接下来按日期找出confidential_count的最大值,匹配对应的箱号,两种常用方法:

方法1:用窗口函数排名

import pandas as pd

# 给每个日期内的统计值降序排名,第一个出现的最大值排第1
conf_count['rank'] = conf_count.groupby('date')['confidential_count'].rank(ascending=False, method='first')

# 筛选排名为1的记录,就是当日最大值对应的箱号
result = conf_count[conf_count['rank'] == 1].drop('rank', axis=1)

如果同一日期有多个箱号达到最大值(比如两个箱号都出现3次),这种方法会保留所有符合条件的记录。

方法2:分组找最大值后合并

# 先按日期分组,找出每个日期的最大confidential_count
date_max = conf_count.groupby('date')['confidential_count'].max().reset_index(name='max_count')

# 合并原统计结果和最大值表,筛选出等于最大值的记录
result = pd.merge(conf_count, date_max, on='date')
result = result[result['confidential_count'] == result['max_count']].drop('max_count', axis=1)

示例验证

假设你的示例数据是:

boxdatestage
AA2022/2/1confidential
AA2022/2/1confidential
AA2022/2/1confidential
AA2022/2/1normal
BB2022/3/1confidential
CC2022/3/1normal

运行代码后,result会输出:

boxdateconfidential_count
AA2022/2/13
BB2022/3/11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:25:20