Python DataFrame高效生成Distance列:基于BH与日期条件
高效实现Distance列的批量赋值方案
针对200万行量级的DataFrame,完全可以用pandas的向量化分组操作实现需求,避免循环带来的性能损耗,具体步骤如下:
将BH列转为布尔标记
先把BH列的"Yes"转换为布尔值,方便后续处理:import pandas as pd import numpy as np # 假设你的DataFrame名为df,包含Date、BH、CP、DP列 df['BH_flag'] = df['BH'] == 'Yes'标记需要计算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行本身,正好符合需求。批量计算Distance列
用np.where根据标记列赋值,未标记的行填充NaN:df['Distance'] = np.where(df['calc_distance'], df['CP'] - df['DP'], np.nan)可选:清理临时列
如果不需要临时的BH_flag和calc_distance列,可以直接删除:df.drop(['BH_flag', 'calc_distance'], axis=1, inplace=True)
性能说明
整个流程全部使用pandas/numpy的向量化操作,避免了逐行循环,处理200万行数据的速度会比循环快几个数量级,完全适配大数据量场景。
内容的提问来源于stack exchange,提问作者Siddhatha Dwivedi
相关产品推荐
相关产品推荐

