Python实现多日期按范围筛选、分组间隔统计计数功能
日期数据批量统计处理方案
前置依赖
直接使用Python标准库即可运行,无需额外安装第三方依赖包。
可直接运行代码
import csv from datetime import datetime # 定义有效日期范围 START_DATE = datetime.strptime("2022-12-01", "%Y-%m-%d") END_DATE = datetime.strptime("2024-12-31", "%Y-%m-%d") def is_valid_date(date_str): """判断日期是否在有效范围内""" try: dt = datetime.strptime(date_str.strip(), "%Y-%m-%d") return START_DATE <= dt <= END_DATE, dt except: return False, None def process_line(date_list): """处理单行12个日期,返回最终计数值""" total = 0 # 每2个日期分为一组 for i in range(0, len(date_list), 2): d1_str, d2_str = date_list[i], date_list[i+1] d1_valid, d1 = is_valid_date(d1_str) d2_valid, d2 = is_valid_date(d2_str) valid_count = sum([d1_valid, d2_valid]) if valid_count == 0: group_score = 0 elif valid_count == 1: group_score = 1 else: # 两个都有效,计算间隔天数 delta = abs((d2 - d1).days) group_score = 1 if delta < 90 else 2 total += group_score return total if __name__ == "__main__": # 输入输出文件路径,可根据实际修改 input_path = "你的输入文件路径.csv" output_path = "统计结果.csv" with open(input_path, 'r', encoding='utf-8') as f_in, open(output_path, 'w', encoding='utf-8', newline='') as f_out: reader = csv.reader(f_in) writer = csv.writer(f_out) # 可选:如果输入文件有表头,先读表头并写入输出,新增结果列 header = next(reader) writer.writerow(header + ["统计结果"]) for row in reader: # 取每行前12个日期字段处理,可根据实际列顺序调整 date_fields = row[:12] res = process_line(date_fields) writer.writerow(row + [res])
使用说明
- 将你的数据文件存为CSV格式,确保每行前12列为对应的12个日期,日期格式统一为
YYYY-MM-DD - 替换代码中
你的输入文件路径为本地文件的实际存储路径 - 运行代码后会在指定输出路径生成结果文件,最后一列即为每行的最终统计值
示例验证
- 示例1输入序列:
2023-01-01, 2023-01-02, 2024-01-01, 2019-01-01,计算得结果为2,符合预期 - 示例2输入序列:
2023-01-01, 2023-01-02, 2024-01-01, 2024-05-01,计算得结果为3,符合预期
内容的提问来源于stack exchange,提问作者Chadi N
相关产品推荐
相关产品推荐

