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

如何基于DataFrame多组起止日期创建日期范围并保存至单个变量

整合日期范围到单个变量的方法

步骤说明

  1. 转换日期列类型:先将DataFrame中的start_date和end_date列转换为datetime类型,确保后续日期范围生成的准确性。
  2. 生成并合并日期范围:遍历每一行生成对应的日期范围,再将所有范围合并为一个统一的集合或Series,方便后续排除操作。

代码实现

首先导入pandas并创建示例数据:

import pandas as pd

# 示例日期范围DataFrame
df_ranges = pd.DataFrame({
    'name': ['range_1', 'range_2', 'range_3', 'range_4'],
    'start_date': ['2022-04-11', '2022-07-25', '2022-10-24', '2022-12-22'],
    'end_date': ['2022-04-24', '2022-09-03', '2022-10-30', '2023-01-08']
})

转换日期列为datetime类型:

df_ranges['start_date'] = pd.to_datetime(df_ranges['start_date'])
df_ranges['end_date'] = pd.to_datetime(df_ranges['end_date'])

方式1:生成日期集合(适合快速查询)

exclude_dates = set()

# 遍历每一行,生成日期范围并添加到集合
for _, row in df_ranges.iterrows():
    # 生成包含起始和结束日期的范围
    date_range = pd.date_range(start=row['start_date'], end=row['end_date'], inclusive='both')
    # 转换为date对象存入集合,避免时区等冗余信息
    exclude_dates.update(date_range.date)

方式2:生成唯一日期Series(适合pandas操作)

# 合并所有日期范围并去重
exclude_dates_series = pd.concat([
    pd.date_range(start=row['start_date'], end=row['end_date'], inclusive='both')
    for _, row in df_ranges.iterrows()
]).unique()

应用到排除操作

假设你有另一个包含日期列的DataFramedf_data,可以这样筛选出不在排除范围内的行:

# 使用集合的情况
filtered_df = df_data[~df_data['date'].dt.date.isin(exclude_dates)]

# 使用Series的情况
filtered_df = df_data[~df_data['date'].isin(exclude_dates_series)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28