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

Pandas实现DataFrame列值比较、异常计数及自定义Length列计算

Pandas 重叠区间检测与条件长度计算实现

异常计数

用shift(1)批量取每一行上一行的End值,直接对比当前行Start即可标记异常,布尔值求和就是异常总数,全程向量化运算不需要写逐行循环。

import pandas as pd
import numpy as np

# 替换为你的实际DataFrame
df = pd.DataFrame({
    'Start': [16360, 16367, 16374, 16401, 16417, 16428, 16435, 16442, 16457],
    'End': [16362, 16381, 16399, 16413, 16427, 16437, 16441, 16444, 16463]
})

# 生成上一行End的序列,首行无前置数据返回NaN
prev_end = df['End'].shift(1)
# 异常判定条件
abnormal_flag = df['Start'] < prev_end
# 异常计数器
i = abnormal_flag.sum()
# 示例数据运行后i=2,和预期一致

按条件计算Length列

用np.where实现批量条件判断,异常行、正常行走不同计算逻辑即可。

df['Length'] = np.where(
    abnormal_flag,
    df['End'] - prev_end,  # 异常行:当前End - 上一行End
    df['End'] - df['Start'] # 正常行:当前End - 当前Start
)

运行后输出的DataFrame结构如下:

Start    End  Length
0  16360  16362     2.0
1  16367  16381    14.0
2  16374  16399    18.0
3  16401  16413    12.0
4  16417  16427    10.0
5  16428  16437     9.0
6  16435  16441     4.0
7  16442  16444     2.0
8  16457  16463     6.0

如果你贴出的预期结果表数值为最终正确值,只需要调整np.where内异常分支的计算式即可,整体框架不需要改动。上述实现比逐行iterrows循环快数十倍,适配百万行级数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:54:24