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

如何在pandas中另一列满足条件时重置diff()计算的日期间隔计数

解决方案

原有代码的问题是仅按id单维度分组,没有识别reset_day = Y触发的重置边界,所以无法中断计数。你可以通过给每个id内部划分重置块的方式实现需求,具体实现代码如下:

import pandas as pd
import numpy as np

# 1. 预处理:先转换日期格式,再按id+日期升序排序,保证同id的记录按时间顺序排列
example['date'] = pd.to_datetime(example['date'], format='%Y/%m/%d')
example = example.sort_values(by=['id', 'date']).reset_index(drop=True)

# 2. 生成每个id内部的重置块标识:遇到reset_day='Y'时块号+1,同一块内的记录连续计算间隔
example['reset_block'] = example.groupby('id')['reset_day'].transform(lambda x: (x == 'Y').cumsum())

# 3. 按id+重置块双重分组计算日期间隔,填充首行NaN为0即可
example['test tdelta'] = example.groupby(['id', 'reset_block'])['date'].diff() / np.timedelta64(1, 'D')
example['test tdelta'] = example['test tdelta'].fillna(0)

# 不需要保留中间标识列可执行以下代码删除
# example = example.drop('reset_block', axis=1)

计算逻辑和你的需求完全匹配:每个reset_day = Y的行都会作为新块的第一行,diff结果为NaN,填充0后和你预设的tdelta值一致;同一块内后续的行会和块内上一行的日期计算间隔,遇到新的Y时自动重置。
如果需要直接填充原tdelta列的缺失值,直接将计算出的test tdelta赋值给tdelta列即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:27:03