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

基于指定日期范围计算各部门每日统计数量

处理方案:按日期统计各部门数量

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)

中间表示例结构:

DateDepartment
2024-01-01DeptA
2024-01-02DeptA
2024-01-02DeptA
......

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)

目标表格示例:

DateDeptADeptB
2024-01-0110
2024-01-0220
2024-01-0321
.........

注意点

  • 拆分日期时特意做了范围交集处理,确保只统计你指定的日期区间内的数据
  • 最终表格里没有数据的日期+部门组合用0填充,保证每行每列都有值

内容的提问来源于stack exchange,提问作者aj7amigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:13:25