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

如何用Pandas统计各ID的有效Activity记录天数及找出最大值?

解决方法

1. 统计每个ID的Activity>0的记录天数

Pandas的分组聚合操作完全可以替代嵌套循环,代码简洁且效率更高。推荐两种实现方式:

方式一:先筛选有效行再分组计数

先过滤出Activity>0的行,再按ID分组统计Date的数量(每个ID每天对应一条记录,计数结果就是有效天数):

import pandas as pd

# 假设你的数据集变量名为df
active_days_per_id = df[df['Activity'] > 0].groupby('ID')['Date'].count()

方式二:分组后直接计算有效天数

利用布尔值的特性(True等价于1,False等价于0),分组后对Activity>0的结果求和,直接得到每个ID的有效天数:

active_days_per_id = df.groupby('ID')['Activity'].gt(0).sum()

gt(0)是Pandas内置的大于比较方法,比手写lambda表达式更简洁高效。

执行后active_days_per_id会是一个Series,索引为ID,对应的值就是该ID的有效天数。


2. 找出记录天数最多的ID

基于上面得到的active_days_per_id,用Pandas内置方法就能快速得到结果:

# 获取天数最多的ID
max_active_id = active_days_per_id.idxmax()
# 获取对应的最大天数(可选)
max_active_count = active_days_per_id.max()

print(f"有效天数最多的ID是:{max_active_id},共{max_active_count}天")

为什么不推荐嵌套循环?

你原来的嵌套循环不仅代码繁琐,而且Pandas的DataFrame本身不适合行遍历的处理方式——Pandas的核心优势是向量化操作,能利用底层优化批量处理数据,比手动循环快几个数量级,数据量越大差距越明显。另外手动维护IDs列表和occ数组容易出错(比如ID不连续、新增ID时需要手动修改),而groupby会自动识别所有唯一ID,无需额外处理。

内容的提问来源于stack exchange,提问作者Getting a master at some point

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:31:06