在Pandas中按序列号计算至下一次事件发生的剩余天数
需求说明
现有如下结构的DataFrame:
| Serialnr | Date | Event occured |
|---|---|---|
| 1 | 10.01.22 | 0 |
| 1 | 05.02.22 | 0 |
| 1 | 12.02.22 | 1 |
| 1 | 20.04.22 | 0 |
| 1 | 27.04.22 | 0 |
| 1 | 01.05.22 | 0 |
| 1 | 05.05.22 | 1 |
| 2 | 10.01.22 | 0 |
| 2 | 05.02.22 | 0 |
| 2 | 12.02.22 | 1 |
| 2 | 20.04.22 | 0 |
| 2 | 27.04.22 | 0 |
| 2 | 01.05.22 | 0 |
| 2 | 05.05.22 | 1 |
需要为每个Serialnr分组的每一行,计算距离下一次Event occured为1的剩余天数,生成名为Days_to_event的列,最终效果如下:
| Serialnr | Date | Event occured | Days_to_event |
|---|---|---|---|
| 1 | 10.01.22 | 0 | 33 |
| 1 | 05.02.22 | 0 | 7 |
| 1 | 12.02.22 | 1 | 82 |
| 1 | 20.04.22 | 0 | 15 |
| 1 | 27.04.22 | 0 | 8 |
| 1 | 01.05.22 | 0 | 4 |
| 1 | 05.05.22 | 1 | NaN |
| 2 | 10.01.22 | 0 | 33 |
| 2 | 05.02.22 | 0 | 7 |
| 2 | 12.02.22 | 1 | 82 |
| 2 | 20.04.22 | 0 | 15 |
| 2 | 27.04.22 | 0 | 8 |
| 2 | 01.05.22 | 0 | 4 |
| 2 | 05.05.22 | 1 | NaN |
解决方案代码
使用Pandas实现,核心逻辑是按序列号分组后,为每行匹配后续最近的事件日期并计算天数差:
import pandas as pd # 构造原始数据(如果已有DataFrame可跳过此步) data = { 'Serialnr': [1,1,1,1,1,1,1,2,2,2,2,2,2,2], 'Date': ['10.01.22','05.02.22','12.02.22','20.04.22','27.04.22','01.05.22','05.05.22', '10.01.22','05.02.22','12.02.22','20.04.22','27.04.22','01.05.22','05.05.22'], 'Event occured': [0,0,1,0,0,0,1,0,0,1,0,0,0,1] } df = pd.DataFrame(data) # 将日期列转换为datetime类型,确保能计算天数差 df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%y') # 定义分组处理函数 def calculate_days_to_event(group): # 提取当前组内所有事件发生的日期并排序 event_dates = group[group['Event occured'] == 1]['Date'].sort_values().tolist() # 为每行日期计算到下一个事件的天数 def get_next_event_days(date): # 筛选出晚于当前日期的事件日期,取第一个 next_event = [d for d in event_dates if d > date] if next_event: return (next_event[0] - date).days # 没有后续事件时返回NaN(可根据需求改为0或其他值) return pd.NA group['Days_to_event'] = group['Date'].apply(get_next_event_days) return group # 按Serialnr分组处理数据 df = df.groupby('Serialnr', group_keys=False).apply(calculate_days_to_event) # 打印结果 print(df)
结果说明
- 非事件行:计算到最近的下一次事件的天数差
- 组内最后一个事件行:因后续无更多事件,
Days_to_event设为NaN,可根据业务需求修改为0或其他标记值
内容的提问来源于stack exchange,提问作者lis
相关产品推荐
相关产品推荐

