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

如何计算DataFrame中两日期列的整数天数差并生成新列?

嘿,这个需求我经常碰到,给你几个简单靠谱的解决办法,轻松得到整数天数差👇

计算Datetime列的整数天数差并生成新列

首先要提个小细节:你当前的代码df['Checkin'] - df['Checkout']得到的是负的timedelta(因为示例里Checkout日期晚于Checkin),如果想要正的天数差,建议反过来计算;或者用绝对值兜底,避免出现负数结果。接下来就可以提取整数天数了,有几种常用方案:

方法一:直接用dt.days属性(最推荐)

timedelta对象的dt.days属性会直接忽略时分秒部分,返回对应的整数天数,完全符合你的需求:

# 方案1:明确顺序(Checkout晚于Checkin时用这个)
df['Days_Stayed'] = (df['Checkout'] - df['Checkin']).dt.days

# 方案2:用绝对值兜底(不确定哪个日期在前时更稳妥)
df['Days_Stayed'] = abs(df['Checkin'] - df['Checkout']).dt.days

用你提供的示例数据计算后,Days_Stayed列会直接得到整数2。

方法二:按需向上/向下取整

如果需要根据时分秒做取舍(比如哪怕超过0天1分钟也算1天),可以用这两种方式:

  • 向下取整(和dt.days效果完全一致):
df['Days_Stayed'] = (df['Checkout'] - df['Checkin']).dt.floor('D').dt.days
  • 向上取整(比如1天1小时直接算2天):
from math import ceil
df['Days_Stayed'] = df.apply(lambda row: ceil((row['Checkout'] - row['Checkin']).total_seconds() / (24*3600)), axis=1)

前置小提醒

如果你的Checkin和Checkout列还没转换成datetime类型,需要先做类型转换:

import pandas as pd
df['Checkin'] = pd.to_datetime(df['Checkin'])
df['Checkout'] = pd.to_datetime(df['Checkout'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:48:20