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

统计列表中落在DataFrame两日期列区间内的日期数量

问题:统计日期列表中落在DataFrame日期区间内的次数

现有一个包含Date1、Date2两列日期的DataFrame(命名为df),以及一个日期列表,需要统计该列表中每个日期落在df每一行Date1与Date2区间内的总次数,最终生成新增Count列的DataFrame(命名为df2)。

示例数据

原始DataFrame(df)

Date1       Date2
2022-09-01  2022-09-07
2022-09-10  2022-09-22
2022-09-06  2022-09-21
2022-09-17  2022-09-25
2022-06-30  2022-09-21

日期列表

['2022-09-16', '2022-07-01']

预期输出(df2)

Date1       Date2        Count
2022-09-01  2022-09-07   0
2022-09-10  2022-09-22   1
2022-09-06  2022-09-21   1
2022-09-17  2022-09-25   0
2022-06-30  2022-09-21   2

解决方案

步骤1:导入依赖并准备数据

先导入pandas库并构造示例数据:

import pandas as pd

# 构造原始DataFrame
data = {
    'Date1': ['2022-09-01', '2022-09-10', '2022-09-06', '2022-09-17', '2022-06-30'],
    'Date2': ['2022-09-07', '2022-09-22', '2022-09-21', '2022-09-25', '2022-09-21']
}
df = pd.DataFrame(data)

# 定义日期列表
date_list = ['2022-09-16', '2022-07-01']

步骤2:转换日期类型

将DataFrame的日期列和日期列表转换为datetime类型,确保能正常进行日期比较:

# 转换DataFrame的日期列
df['Date1'] = pd.to_datetime(df['Date1'])
df['Date2'] = pd.to_datetime(df['Date2'])

# 转换日期列表为datetime对象
date_list = pd.to_datetime(date_list)

步骤3:计算Count列

提供两种实现方式,按需选择:

方式一:逐行判断(代码直观,适合小数据量)

定义函数统计每行符合条件的日期数量,通过apply逐行调用:

def count_dates_in_range(row, dates):
    return sum((dates >= row['Date1']) & (dates <= row['Date2']))

df['Count'] = df.apply(count_dates_in_range, dates=date_list, axis=1)
df2 = df.copy()

方式二:向量化操作(效率更高,适合大数据量)

利用广播生成布尔矩阵,再按列求和得到每行的符合条件次数:

# 生成布尔矩阵:每行对应每个日期是否在区间内
mask = (date_list[:, None] >= df['Date1']) & (date_list[:, None] <= df['Date2'])
# 按列求和,得到每行的计数
df['Count'] = mask.sum(axis=0)
df2 = df.copy()

查看结果

执行后打印df2即可得到预期输出:

print(df2)

输出:

Date1      Date2  Count
0 2022-09-01 2022-09-07      0
1 2022-09-10 2022-09-22      1
2 2022-09-06 2022-09-21      1
3 2022-09-17 2022-09-25      0
4 2022-06-30 2022-09-21      2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:10:33