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

如何在Pandas中基于指定日期列表计算日期差值列

解决方案

可以借助numpy.searchsorted高效定位每个日期对应的参考日期,结合Pandas的日期处理能力实现需求,具体步骤如下:

1. 准备数据与环境

首先导入所需库,并确保DataFrame的b列是datetime类型:

import pandas as pd
import numpy as np
import datetime

# 创建示例DataFrame
data = {
    'a': [7,6,1,3,8,9,4],
    'b': ['2019-05-01 00:00:01', '2019-05-02 00:15:01', '2019-05-06 00:10:01',
          '2019-05-09 01:00:01', '2019-05-09 04:20:01', '2019-05-12 01:10:01',
          '2019-05-16 03:30:01']
}
df = pd.DataFrame(data)
df['b'] = pd.to_datetime(df['b'])

# 日期列表
l = [datetime.datetime(2019,5,2), datetime.datetime(2019,5,10), datetime.datetime(2019,5,22)]
# 确保列表已排序(提升通用性,即使原列表无序也能正常工作)
l_sorted = sorted(l)

2. 定位参考日期

使用np.searchsorted找到每个b列日期在排序后列表中的插入位置,再根据位置确定对应的参考日期:

# 获取每个日期在排序列表中的插入位置
insert_pos = np.searchsorted(l_sorted, df['b'], side='right')

# 确定每行的参考日期:插入位置>0则取列表中前一个元素,否则取列表最小日期
df['date'] = [l_sorted[pos-1] if pos > 0 else l_sorted[0] for pos in insert_pos]

3. 计算天数差值delta

利用Pandas的日期差计算功能,直接得到天数差值:

df['delta'] = (df['b'] - df['date']).dt.days

最终结果

运行上述代码后,DataFrame将生成符合预期的输出:

a                   b       date  delta
0  7 2019-05-01 00:00:01 2019-05-02     -1
1  6 2019-05-02 00:15:01 2019-05-02      0
2  1 2019-05-06 00:10:01 2019-05-02      4
3  3 2019-05-09 01:00:01 2019-05-02      7
4  8 2019-05-09 04:20:01 2019-05-02      7
5  9 2019-05-12 01:10:01 2019-05-10      2
6  4 2019-05-16 03:30:01 2019-05-10      6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:03:21