You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:39:02