如何将从日期提取的小时转换为含日期偏移的累计小时数?
解决方案:计算累计小时数(以首个日期为基准)
嘿,这个需求其实很好实现,核心就是把日期时间转成可计算的格式,然后以第一天为基准累加小时。咱们一步步来:
1. 先把日期字符串转成datetime类型
首先得把你的POETime和POXTime这两列从字符串转成pandas能识别的datetime对象,这样才能做日期差计算:
import pandas as pd # 假设你的DataFrame叫df,替换成你实际的变量名即可 df['POETime'] = pd.to_datetime(df['POETime'], format='%d/%m/%Y %H:%M') df['POXTime'] = pd.to_datetime(df['POXTime'], format='%d/%m/%Y %H:%M')
2. 确定基准日期
取DataFrame里第一条记录的日期作为基准(只保留日期部分,忽略具体时间):
base_date = df['POXTime'].dt.date.iloc[0]
3. 计算每个记录与基准日的天数差
用每个记录的日期减去基准日,得到相隔的天数:
df['days_since_base'] = (df['POXTime'].dt.date - base_date).dt.days
4. 计算累计小时数
这里要注意:pandas的dt.hour返回的是0-23的小时数,而你需要的是1-24的格式,所以先加1转成你需要的范围,再加上天数差乘以24的累计小时:
# 处理POXTime的累计小时 df['POXHour_cumulative'] = df['days_since_base'] * 24 + (df['POXTime'].dt.hour + 1) # 同理处理POETime的累计小时 df['POEHour_cumulative'] = df['days_since_base'] * 24 + (df['POETime'].dt.hour + 1)
验证一下你的示例
拿你给的日期切换例子测试:
- 01/05/2018 00:09:
dt.hour是0,加1得1,天数差0,累计小时就是0*24+1=1,和你示例里的结果一致。 - 02/05/2018 02:17:
dt.hour是2,加1得3,天数差1,累计小时=1*24+3=27,完美匹配你的示例。 - 02/05/2018 17:18:
dt.hour是17,加1得18,天数差1,累计小时=24+18=42,也和你要的结果对得上。
这样处理后,不管后续有多少天的数据,都会自动按24的倍数累加小时数,完全满足你的需求。
内容的提问来源于stack exchange,提问作者djj1994
相关产品推荐
相关产品推荐

