如何在数据集Date与Fdate相同时保留该日期前后一周的数据?
实现方法(基于Python Pandas)
步骤说明
- 转换日期格式:先把数据中的
Date和Fdate列从字符串转成可计算的日期类型,这是后续日期运算的基础。 - 定位目标日期:找出所有
Date与Fdate取值相同的行,提取这些日期并去重,避免重复处理同一日期。 - 筛选日期范围:对每个目标日期,计算其前后一周的时间段,然后筛选出所有
Date落在这些时间段内的数据。 - 去重合并结果:如果不同目标日期的时间范围有重叠,同一行数据可能被多次选中,最后需要去重得到最终结果。
代码示例
import pandas as pd # 加载数据集(请根据实际文件格式调整,比如Excel用pd.read_excel) df = pd.read_csv("your_dataset.csv") # 将日期列转换为datetime类型,确保可以进行日期运算 df["Date"] = pd.to_datetime(df["Date"]) df["Fdate"] = pd.to_datetime(df["Fdate"]) # 获取所有Date与Fdate相等的目标日期,去重处理 target_dates = df[df["Date"] == df["Fdate"]]["Date"].unique() # 初始化空的结果集 filtered_data = pd.DataFrame() # 遍历每个目标日期,筛选前后一周的数据 for target_date in target_dates: # 计算前后一周的起始和结束日期 start = target_date - pd.Timedelta(weeks=1) end = target_date + pd.Timedelta(weeks=1) # 筛选当前范围内的数据 temp_data = df[(df["Date"] >= start) & (df["Date"] <= end)] filtered_data = pd.concat([filtered_data, temp_data]) # 去重,避免同一行被多个时间范围重复选中 filtered_data = filtered_data.drop_duplicates().reset_index(drop=True) # 输出结果 print(filtered_data)
可选:Excel实现方式
如果用Excel处理,步骤如下:
- 步骤1:添加辅助列,用公式
=A2=B2(假设Date在A列,Fdate在B列),筛选出结果为TRUE的行,记录这些行的Date值。 - 步骤2:对每个记录的目标日期,计算前后一周的日期:
- 前一周:
=DATE(YEAR(目标日期单元格),MONTH(目标日期单元格),DAY(目标日期单元格)-7) - 后一周:
=DATE(YEAR(目标日期单元格),MONTH(目标日期单元格),DAY(目标日期单元格)+7)
- 前一周:
- 步骤3:使用「高级筛选」功能,设置条件为
Date >= 起始日期且Date <= 结束日期,将所有符合条件的行提取到新工作表中,最后合并去重。
内容的提问来源于stack exchange,提问作者Ciercy
相关产品推荐
相关产品推荐

