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

Pandas按a列分组仅b列值变化时累计计数的最优实现方法

pandas实现同a分组下b变化时计数递增方案

实现代码

import pandas as pd

# 原始数据生成
l = [["a", 12, 12], ["a", 12, 33.], ["b", 12.3, 12.3], ["a", 13, 1]]
df = pd.DataFrame(l, columns=["a", "b", "c"])

# 核心逻辑:同a分组内b变化时计数递增
df['freq'] = df.groupby('a')['b'].apply(lambda x: (x != x.shift()).cumsum())

逻辑说明

  • 先按a列分组,所有判断和计数都在相同a值的分组内执行
  • 用x.shift()取分组内上一行的b值,和当前行b值比较,不相等时返回布尔值True(对应数值1),相等返回False(对应数值0)
  • 对比较结果做累计求和,b每变化一次计数+1,完全匹配需求

高性能优化版(适合处理百万级以上大数据)

避免apply带来的性能损耗,写法如下:

df['freq'] = (df['b'].ne(df.groupby('a')['b'].shift())).groupby(df['a']).cumsum()

最终输出效果

abcfreq
a12.012.01
a12.033.01
b12.312.31
a13.01.02

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:04