如何在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
相关产品推荐
相关产品推荐

