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

如何用Pandas检查DataFrame列中数值是否为步长1的连续序列

检查DataFrame数值列是否为步长1的连续序列

没问题,我来帮你搞定这个需求——判断DataFrame里的int/float列是不是步长严格为1的连续序列。咱们结合你给的例子一步步来:

先构造你的示例数据

首先把你提供的表格转成pandas DataFrame:

import pandas as pd

data = {
    'inv_id': [123, 124, 125, 126, 127],
    'ven_id': [1.22, 2.22, 3.22, 4.22, 5.22],
    'pay_id': [1230, 1234, 1235, 1240, 1241]
}
df = pd.DataFrame(data)

核心思路

要判断一列是否是步长1的连续序列,关键看两点:

  1. 列必须是数值类型(int/float);
  2. 所有相邻元素的差值必须严格等于1(注意浮点数的精度问题,需要近似判断)。

实现检查函数

我写一个通用函数来检查单列:

def is_consecutive_step1(series):
    # 先排除非数值类型的列
    if not pd.api.types.is_numeric_dtype(series):
        return False
    # 处理只有1个元素的情况(可根据需求调整,这里默认算连续)
    if len(series) <= 1:
        return True
    # 计算相邻元素的差值,去掉第一个NaN(因为第一个元素没有前项)
    diffs = series.diff().dropna()
    # 针对浮点数做精度兼容,避免计算误差导致误判
    if series.dtype == 'float64':
        return all(diffs.round(9) == 1)
    # 整数直接判断差值是否全为1
    else:
        return all(diffs == 1)

应用到整个DataFrame

把函数应用到每一列,就能得到结果:

check_result = df.apply(is_consecutive_step1)
print(check_result)

执行后输出如下,完全符合你的预期:

inv_id     True
ven_id     True
pay_id    False
dtype: bool

补充说明

  • 浮点数精度问题:比如2.22 - 1.22理论上是1,但浮点数计算可能得到0.9999999999999996,所以用round(9)来消除精度误差的影响;
  • 特殊场景处理:如果列只有1个元素,函数默认返回True,你可以根据自己的需求修改这个逻辑;
  • 重复值/断层处理:如果列里有重复值(比如[1,2,2,3])或者断层(比如[1,3,4]),差值会出现0或大于1的情况,函数会返回False,符合连续序列的定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:29