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

基于分类列变化计算滚动时间差的高效实现问询

高效计算分类变量切换后的累计秒数

现有如下结构的DataFrame:

AtX(期望输出)
10.00
13.23.2
13.93.9
118.018
127.427.4
347.40
350.22.9
357.29.8
364.817.4
376.429.1
280.50
185.30
187.42.1

需求:计算列X,表示自A列值发生变化以来的秒数。用循环实现效率过低,尝试以下代码未得到正确结果:

g = df[A].transform(lambda x: x.diff().ne(0).cumsum())    
df[X] = df[A].cumcount() + 1

高效解决方案

核心思路是先对连续相同的A值进行分组,再在每个分组内用当前t值减去分组内第一个t值,即可得到目标结果:

  1. 生成连续分组标识
    用ne()结合shift()判断当前行A值是否和上一行不同,再通过cumsum()生成连续相同A的分组ID:

    df['group_id'] = df['A'].ne(df['A'].shift()).cumsum()
    
  2. 计算目标列X
    按分组ID分组后,对t列应用transform('first')获取每组的起始时间,再用当前t减去起始时间:

    df['X'] = df['t'] - df.groupby('group_id')['t'].transform('first')
    
  3. 可选:匹配示例精度
    如果需要和示例中的小数位数一致,可对结果做四舍五入处理:

    df['X'] = df['X'].round(1)
    

执行后得到的X列完全匹配期望输出,全程使用pandas内置向量化操作,效率远高于循环实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:27:10