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

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)

代码解释

  1. 日期格式转换:把字符串类型的date列转为datetime类型,确保能进行日期计算。
  2. 定位上一个活跃日期:用where仅保留active=1行的日期,其余设为NaN;再用ffill()向前填充,让每一行都获取到最近的上一个活跃日期。
  3. 计算工作日间隔:pd.bdate_count()直接计算两个日期之间的工作日数量(不包含起始日,完全匹配你的示例结果),该方法是向量化实现,比循环或apply效率更高。

原代码问题说明

你原代码尝试在创建distance列时引用自身的shift()结果,但此时distance列尚未创建,Python无法识别该列。另外,原代码仅简单累加1,未过滤周末/节假日,即便能运行,结果也不符合实际工作日的统计需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:54:22