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

如何在Python Pandas中基于Value1与Value3匹配计算日期天数间隔

Pandas实现按条件计算日期间隔并生成新列

完全可以实现,以下是具体步骤和代码:

步骤1:准备数据并转换日期格式

首先需要把Date列从字符串转换成Pandas的datetime类型,这是计算日期差的基础。

import pandas as pd

# 构造原始数据(也可替换为pd.read_csv读取本地数据源)
data = {
    'Date': ['2023/02/05', '2023/02/04', '2023/02/03', '2023/02/02', '2023/02/01'],
    'Value1': [True, True, False, True, True],
    'Value2': [1, 1, 1, 1, 1],
    'Value3': [5, 5, 5, 4, 5]
}
df = pd.DataFrame(data)

# 将Date列转为datetime类型
df['Date'] = pd.to_datetime(df['Date'])

步骤2:按条件计算日期间隔

我们按Value3分组,只在同组内且Value1为True的行之间计算日期差,不符合条件的行直接设为0:

def calculate_day_diff(group):
    group = group.copy()
    # 标记符合计算条件的行
    valid_mask = group['Value1'] == True
    # 获取同组内下一个符合条件的日期(因数据按日期降序排列,用shift(-1)取下方行的日期)
    group['next_valid_date'] = group.loc[valid_mask, 'Date'].shift(-1)
    # 计算天数差,空值(最后一个符合条件的行)填充为0
    group['D'] = (group['Date'] - group['next_valid_date']).dt.days.fillna(0).astype(int)
    # 不符合条件的行直接设为0
    group.loc[~valid_mask, 'D'] = 0
    return group

# 应用分组逻辑
df = df.groupby('Value3', group_keys=False).apply(calculate_day_diff)

查看结果

执行后输出的df与你期望的结果一致:

Date  Value1  Value2  Value3  D
0 2023-02-05    True       1       5  1
1 2023-02-04    True       1       5  3
2 2023-02-03   False       1       5  0
3 2023-02-02    True       1       4  0
4 2023-02-01    True       1       5  0

注意事项

如果你的原始数据不是按日期降序排列的,需要先对Date列排序:

df = df.sort_values('Date', ascending=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:35:45