基于指定日期范围计算各部门每日统计数量
处理方案:按日期统计各部门数量
1. 数据预处理
- 先导入pandas库,把原始数据里的日期字段转换成日期类型,避免字符串处理出错:
import pandas as pd # 示例原始数据,实际替换成你的数据源即可 raw_df = pd.DataFrame({ 'Function': ['Func1', 'Func2', 'Func3'], 'Department': ['DeptA', 'DeptB', 'DeptA'], 'Start Date': ['2024-01-01', '2024-01-03', '2024-01-02'], 'End Date': ['2024-01-05', '2024-01-06', '2024-01-04'] }) # 转换日期列格式 raw_df['Start Date'] = pd.to_datetime(raw_df['Start Date']) raw_df['End Date'] = pd.to_datetime(raw_df['End Date'])
2. 生成中间展开表
把每条记录的日期区间拆成单日行,每行对应一个日期+部门,这就是你要的中间表:
# 设定需要统计的目标日期范围 target_start = '2024-01-01' target_end = '2024-01-06' # 遍历原始数据,拆分日期区间 intermediate_rows = [] for _, row in raw_df.iterrows(): # 取当前记录和指定范围的交集日期,避免超出统计范围 valid_start = max(row['Start Date'], pd.to_datetime(target_start)) valid_end = min(row['End Date'], pd.to_datetime(target_end)) # 生成该记录覆盖的所有日期 for single_date in pd.date_range(valid_start, valid_end): intermediate_rows.append({ 'Date': single_date.date(), 'Department': row['Department'] }) # 转成DataFrame格式的中间表 intermediate_df = pd.DataFrame(intermediate_rows)
中间表示例结构:
| Date | Department |
|---|---|
| 2024-01-01 | DeptA |
| 2024-01-02 | DeptA |
| 2024-01-02 | DeptA |
| ... | ... |
3. 生成最终目标表格
基于中间表按日期+部门分组计数,再转成宽表格式:
# 分组统计每个日期每个部门的数量 count_result = intermediate_df.groupby(['Date', 'Department']).size().reset_index(name='Total') # 转成以日期为行、部门为列的目标DataFrame target_df = count_result.pivot(index='Date', columns='Department', values='Total').fillna(0).astype(int)
目标表格示例:
| Date | DeptA | DeptB |
|---|---|---|
| 2024-01-01 | 1 | 0 |
| 2024-01-02 | 2 | 0 |
| 2024-01-03 | 2 | 1 |
| ... | ... | ... |
注意点
- 拆分日期时特意做了范围交集处理,确保只统计你指定的日期区间内的数据
- 最终表格里没有数据的日期+部门组合用
0填充,保证每行每列都有值
内容的提问来源于stack exchange,提问作者aj7amigo
相关产品推荐
相关产品推荐

