如何统计各截止日期对应的案件数并生成指定结构的DataFrame
处理截止日期案件统计的Pandas方案
步骤1:统一日期格式
先把D1-D4列转为标准日期类型,空值自动转为NaT(Pandas缺失日期标记):
import pandas as pd # 转换日期列格式 df[['D1', 'D2', 'D3', 'D4']] = df[['D1', 'D2', 'D3', 'D4']].apply(pd.to_datetime, errors='coerce')
步骤2:整理为长格式数据
把多列日期合并成单列,保留案件ID并过滤空值:
# 转长格式并剔除空日期 date_long = df.melt( id_vars='Case ID', value_vars=['D1', 'D2', 'D3', 'D4'], value_name='Deadline' ).dropna(subset=['Deadline'])
步骤3:统计日期对应案件数
按日期分组统计案件数量:
- 若需确保同一案件在单日期仅计一次,用
nunique - 若需统计所有日期出现次数(含同一案件多次出现),替换为
count
# 统计每个日期的案件数量 date_counts = date_long.groupby('Deadline')['Case ID'].nunique().reset_index(name='Case Count')
步骤4:生成完整日期索引并补全
生成从最小到最大日期的完整序列,合并统计结果并填充缺失日期的计数为0:
# 获取完整日期范围 min_date = date_long['Deadline'].min() max_date = date_long['Deadline'].max() full_date_range = pd.date_range(start=min_date, end=max_date, freq='D') # 创建最终结果DataFrame result_df = pd.DataFrame(index=full_date_range) result_df = result_df.join(date_counts.set_index('Deadline')).fillna(0) result_df['Case Count'] = result_df['Case Count'].astype(int)
最终的result_df就是以完整日期序列为索引、每行对应日期案件数量的目标DataFrame。
内容的提问来源于stack exchange,提问作者user1655380
相关产品推荐
相关产品推荐

