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
相关产品推荐
相关产品推荐

