如何计算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
相关产品推荐
相关产品推荐

