如何统计pandas datetime列按ID分组的累计缺失天数
问题需求
现有示例DataFrame构造代码如下:
import pandas as pd data = {'ID':['A', 'A', 'A','A','A','A' ,'B','B','B','B','B'], 'Date':['2021-09-20 04:34:57', '2021-09-20 04:37:25', '2021-09-22 04:38:26', '2021-09-23 00:12:29','2021-09-22 11:20:58','2021-09-25 09:20:58','2021-03-11 21:20:00','2021-03-11 21:25:00','2021-03-12 21:25:00', '2021-03-13 21:25:00', '2021-03-15 21:25:00']} df1 = pd.DataFrame(data)
要求:
- Date列已为datetime格式,按ID分组统计每个参与者在自身最早、最晚日期区间内的总缺失天数
- 输出包含ID和对应缺失天数的新DataFrame,预期结果为ID A对应3天,ID B对应1天
实现代码
# 若Date列未提前转换为datetime格式,可先执行该行 df1['Date'] = pd.to_datetime(df1['Date']) # 提取纯日期字段,排除时间部分的统计干扰 df1['date_only'] = df1['Date'].dt.date # 按ID分组聚合核心指标 res_df = df1.groupby('ID').agg( earliest_dt = ('date_only', 'min'), latest_dt = ('date_only', 'max'), existed_days = ('date_only', 'nunique') ).reset_index() # 计算逻辑:区间总天数 - 实际存在的不重复天数 = 缺失天数 res_df['missing_days'] = (res_df['latest_dt'] - res_df['earliest_dt']).days + 1 - res_df['existed_days'] # 提取最终输出字段 final_df = res_df[['ID', 'missing_days']] print(final_df)
输出结果
ID missing_days 0 A 3 1 B 1
内容的提问来源于stack exchange,提问作者Shiva
相关产品推荐
相关产品推荐

