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

基于日期范围计算酒店每日入住人数(求和法)

基于Pandas生成酒店每日入住人数统计

原始数据结构

给定的酒店入住记录DataFrame如下:

entry_dateexit_datedaysother_columns
2022-02-012022-02-055...
2022-02-022022-02-032...
2022-04-102022-04-134...
2022-04-112022-04-122...
2022-04-122022-04-132...
2022-11-102022-11-156...

目标需求

生成每日实时入住人数的DataFrame,格式如下:

dateocupation
2022-02-011
2022-02-022
2022-02-032
2022-02-041
2022-02-051
2022-04-101
2022-04-112
2022-04-123
2022-04-132
2022-11-101
2022-11-111
2022-11-121
2022-11-131
2022-11-141
2022-11-151

解决方案代码

以下是实现逻辑的Python代码,核心思路是生成每个客人的入住日期序列,再按日期统计人数:

import pandas as pd

# 构造原始DataFrame(实际使用时可替换为你的数据源)
data = {
    'entry_date': ['2022-02-01', '2022-02-02', '2022-04-10', '2022-04-11', '2022-04-12', '2022-11-10'],
    'exit_date': ['2022-02-05', '2022-02-03', '2022-04-13', '2022-04-12', '2022-04-13', '2022-11-15'],
    'days': [5, 2, 4, 2, 2, 6],
    'other_columns': ['...'] * 6
}
df = pd.DataFrame(data)

# 1. 将entry_date转换为datetime类型,方便生成日期序列
df['entry_date'] = pd.to_datetime(df['entry_date'])

# 2. 为每个客人生成对应的入住日期列表,天数由days字段指定
df['date'] = df.apply(lambda row: pd.date_range(start=row['entry_date'], periods=row['days']), axis=1)

# 3. 展开日期列表,让每个日期单独成为一行
df_exploded = df.explode('date')

# 4. 按日期分组统计当日入住人数,并重命名列名
occupation_df = df_exploded.groupby('date').size().reset_index(name='ocupation')

# 5. 可选:将日期格式化为字符串(与目标格式一致)
occupation_df['date'] = occupation_df['date'].dt.strftime('%Y-%m-%d')

# 查看结果
print(occupation_df)

代码说明

  • 日期转换:先把entry_date转为datetime类型,是生成连续日期序列的基础。
  • 生成日期序列:利用pd.date_range,以entry_date为起点,days为周期数,生成每个客人的所有入住日期。
  • 展开行:explode方法将每个客人的日期列表拆分成多行,每一行对应一个日期和一位客人。
  • 统计人数:groupby('date').size()统计每个日期的记录数,即当日的入住人数。
  • 格式调整:最后将日期转为字符串格式,匹配目标输出的日期样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:50:36