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

Pandas 无循环处理设备采集数据64位无符号整数溢出问题

实现方案

直接使用Pandas向量化操作替代逐行循环,性能远高于迭代写法,核心思路是先拆分「同type且uptime连续递增」的分组,分组内统计累计溢出次数再统一修正值:

完整代码

import pandas as pd

# 预处理逻辑和原有代码对齐
df[['col1', 'col2']] = df[['col1', 'col2']].fillna(0).astype(int)
# 和原有循环逻辑对齐,需要调整加数值可修改此处
OFFSET_STEP = 2 ** 64 - 1

# 步骤1:生成连续会话分组
# 判断是否为新分组起点:type变化 或 uptime下降
is_new_group = (df['type'] != df['type'].shift(1)) | (df['uptime'] <= df['uptime'].shift(1))
is_new_group.iloc[0] = True
df['group_id'] = is_new_group.cumsum()

# 步骤2:分组计算累计溢出偏移量
def calc_offset(series):
    # 当前值小于上一行值则标记溢出,累计溢出次数乘以偏移步长
    return (series.diff() < 0).cumsum() * OFFSET_STEP

df['col1'] += df.groupby('group_id')['col1'].transform(calc_offset)
df['col2'] += df.groupby('group_id')['col2'].transform(calc_offset)

# 步骤3:删除临时列(可选)
df.drop('group_id', axis=1, inplace=True)

逻辑说明

  • 分组逻辑和业务规则完全对齐:只要type变化或者uptime下降就会生成新分组,分组间溢出状态独立,不会互相影响
  • 溢出统计用diff()替代逐行比较,cumsum()直接累计溢出次数,完全符合「溢出一次后同组后续所有行都要加偏移量」的要求
  • 支持同分组内多次溢出的场景,比如连续溢出2次就会自动加2倍偏移步长,覆盖场景比原有循环逻辑更全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:15:02