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

Python DataFrame高效生成Distance列:基于BH与日期条件

高效实现Distance列的批量赋值方案

针对200万行量级的DataFrame,完全可以用pandas的向量化分组操作实现需求,避免循环带来的性能损耗,具体步骤如下:

  1. 将BH列转为布尔标记
    先把BH列的"Yes"转换为布尔值,方便后续处理:

    import pandas as pd
    import numpy as np
    
    # 假设你的DataFrame名为df,包含Date、BH、CP、DP列
    df['BH_flag'] = df['BH'] == 'Yes'
    
  2. 标记需要计算Distance的行
    按Date分组后,用cummax()(累积最大值)实现“第一个Yes之后所有行标记为True”的效果,同时排除BH为Yes的行本身:

    # 按Date分组,标记Yes之后的所有行(不包含Yes行)
    df['calc_distance'] = df.groupby('Date')['BH_flag'].cummax() & ~df['BH_flag']
    

    cummax()会让分组内一旦出现True(即BH=Yes),后续所有行都保持True,再通过~df['BH_flag']排除Yes行本身,正好符合需求。

  3. 批量计算Distance列
    用np.where根据标记列赋值,未标记的行填充NaN:

    df['Distance'] = np.where(df['calc_distance'], df['CP'] - df['DP'], np.nan)
    
  4. 可选:清理临时列
    如果不需要临时的BH_flag和calc_distance列,可以直接删除:

    df.drop(['BH_flag', 'calc_distance'], axis=1, inplace=True)
    

性能说明

整个流程全部使用pandas/numpy的向量化操作,避免了逐行循环,处理200万行数据的速度会比循环快几个数量级,完全适配大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:25:24