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

通过日期对比计算DataFrame列值:统计各地点月度在籍人数

按地点统计未来3个月在籍人数的实现方案

核心思路

  1. 将原始的月份缩写日期(如MAY2025)转换为标准datetime格式,方便日期比较
  2. 动态生成指定起始月份的未来3个月列
  3. 逐个判断员工在对应月份是否在籍,最后按地点聚合统计人数

完整代码

import pandas as pd

# 原始数据
x = pd.DataFrame({
    'Location': ['Paris', 'Dallas', 'Tokyo', 'London'],
    'Departing': ['MAY2025', 'JUN2025', 'APR2025', 'JUN2025'],
    'Arriving': ['MAR2025', 'JUN2025', 'JUN2025', 'APR2025'],
})

# 转换日期列为标准datetime格式(取当月第一天)
x['Arriving'] = pd.to_datetime(x['Arriving'], format='%b%Y')
x['Departing'] = pd.to_datetime(x['Departing'], format='%b%Y')

# 定义起始月份(可按需修改,比如改为'2025-05')
start_month = '2025-04'
start_date = pd.to_datetime(start_month)

# 生成未来3个月的列名(格式:YYYY-MM)
months = pd.date_range(start=start_date, periods=3, freq='MS')
month_cols = months.strftime('%Y-%m')

# 为每个月份生成在籍标记(1表示在籍,0表示不在籍)
for col in month_cols:
    month_start = pd.to_datetime(col)
    month_end = month_start + pd.offsets.MonthEnd(0)
    # 判断逻辑:到岗日期不晚于当月末,且离职日期不早于当月初
    x[col] = ((x['Arriving'] <= month_end) & (x['Departing'] >= month_start)).astype(int)

# 按地点分组,统计各月份在籍人数
result = x.groupby('Location')[month_cols].sum().reset_index()
print(result)

代码说明

  • 日期转换:用pd.to_datetime配合format='%b%Y'解析月份缩写+年份的格式,确保日期可比较
  • 动态生成月份列:修改start_month参数即可切换统计起始月,实现按月复用
  • 在籍判断逻辑:员工在某月份在籍的条件为「到岗时间不晚于当月最后一天,且离职时间不早于当月第一天」,覆盖整月在职的情况
  • 聚合统计:通过groupby按地点分组,对各月份的标记值求和得到在籍人数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:55:10