如何基于DataFrame多组起止日期创建日期范围并保存至单个变量
整合日期范围到单个变量的方法
步骤说明
- 转换日期列类型:先将DataFrame中的
start_date和end_date列转换为datetime类型,确保后续日期范围生成的准确性。 - 生成并合并日期范围:遍历每一行生成对应的日期范围,再将所有范围合并为一个统一的集合或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
相关产品推荐
相关产品推荐

