Python DataFrame中计算行到上一个active=1行的工作日距离问题
解决方法
首先确保日期列是datetime类型,然后定位每个行对应的上一个active=1的日期,最后计算两个日期之间的工作日天数:
import pandas as pd # 转换日期列为datetime格式(根据你的日期格式调整format参数) df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y') # 标记并向前填充上一个active=1的日期 df['last_active_date'] = df['date'].where(df['active'] == 1).ffill() # 计算工作日天数差 df['distance'] = pd.bdate_count(df['last_active_date'], df['date']) # 可选:如果不需要保留last_active_date列,可以删除 df = df.drop('last_active_date', axis=1)
代码解释
- 日期格式转换:把字符串类型的
date列转为datetime类型,确保能进行日期计算。 - 定位上一个活跃日期:用
where仅保留active=1行的日期,其余设为NaN;再用ffill()向前填充,让每一行都获取到最近的上一个活跃日期。 - 计算工作日间隔:
pd.bdate_count()直接计算两个日期之间的工作日数量(不包含起始日,完全匹配你的示例结果),该方法是向量化实现,比循环或apply效率更高。
原代码问题说明
你原代码尝试在创建distance列时引用自身的shift()结果,但此时distance列尚未创建,Python无法识别该列。另外,原代码仅简单累加1,未过滤周末/节假日,即便能运行,结果也不符合实际工作日的统计需求。
内容的提问来源于stack exchange,提问作者vicefreak04
相关产品推荐
相关产品推荐

