R语言逐行统计晚于指定日期的日期数并新增date_count列
需求说明
现有存储日期数据的DataFrame,日期存储格式为yyyy-mm-dd hh:mm:ss,需实现以下逻辑:
- 排除
ID、creation_date两列不参与统计 - 逐行计算所有晚于
2021-05-22 00:00:00的日期值总个数 - 新增
date_count列存储每行的统计结果
样例输入数据结构:
ID creation_date date1 date2 date230 1 2021-03-04 06:40:37 2021-03... 2022-06... 2022-06 2 2021-03-05 04:24:43 2021-04... NA NA 3 2022-03-19 20:37:07 2022-05... 2022-06... NA ... 563 2022-04-23 20:59:45 2022-05... 2022-05... 2022-06
期望输出结构:
ID creation_date date1 date2 date230 date_count 1 2021-03-04 06:40:37 2021-03... 2022-06... 2022-06... 123 2 2021-03-05 04:24:43 2021-04... NA NA 123 3 2022-03-19 20:37:07 2022-05... 2022-06... NA 123 ... 563 2022-04-23 20:59:45 2022-05... 2022-05... 2022-06... 123
pandas实现代码
import pandas as pd # 定义时间统计阈值 cutoff_time = pd.to_datetime("2021-05-22 00:00:00") # 自动筛选需要参与统计的列(排除ID和creation_date) stat_columns = df.columns.difference(["ID", "creation_date"]) # 统一将待统计列转为datetime格式,无法解析的异常值转为空值 df[stat_columns] = df[stat_columns].apply(pd.to_datetime, errors="coerce") # 逐行统计大于阈值的日期数量,结果存入新列 df["date_count"] = (df[stat_columns] > cutoff_time).sum(axis=1)
逻辑说明
- 不需要手动枚举
date1到date230的所有列,代码会自动识别所有非排除列,后续新增日期列也无需修改代码 - 空值(NA/NaT)在比较和求和时会被自动跳过,不会计入统计结果,也不会触发报错
- 先统一转datetime格式再比较,避免字符串格式日期比较出现逻辑错误
内容的提问来源于stack exchange,提问作者Linda
相关产品推荐
相关产品推荐

