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

如何在Pandas DataFrame中按日期统计非零值数量生成计数列

实现方法

你可以通过pandas的分组+transform广播特性快速实现需求,核心逻辑是按日期分组后统计每组非0值的数量,再将统计结果映射到同组的所有行:

核心代码

df['count'] = df.groupby('date')['value'].transform(lambda x: (x != 0).sum())

逻辑说明

  • 先通过groupby('date')将数据按日期字段拆分为多个独立分组
  • 对每个分组的value列执行计算:(x != 0).sum()会先把非0值标记为1、0值标记为0,求和结果就是当前日期下非0值的总条数
  • transform方法会把每组计算出的单个统计值,自动赋值给组内的所有行,不会改变原数据的行数,刚好满足同日期所有行count值统一的要求。哪怕value为负数,只要不等于0都会被正常统计,完全匹配你给出的预期输出规则。

完整测试代码

你可以运行以下代码验证效果:

import pandas as pd

# 构造示例DataFrame
data = {
    'date': ['01/01/2020']*4 + ['02/01/2020']*4 + ['03/01/2020']*4,
    'value': [2, 3, 0, 4, 1, 3, 8, 4, 0, 0, 1, 0]
}
df = pd.DataFrame(data)

# 新增count列
df['count'] = df.groupby('date')['value'].transform(lambda x: (x != 0).sum())

# 输出结果
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:24:03