如何使用Pandas计算指定时间段落在各时间区间内的分钟数
Pandas计算指定时间段落在预设区间的分钟数方法
核心逻辑是将所有时间点转为pandas.Timedelta格式,计算待计算时间段和每个预设区间的交集时长,再转换为分钟数即可,支持多区间自定义扩展。
单组时间计算代码示例
import pandas as pd # 自定义预设区间,可按需求新增/修改 preset_intervals = [ ("interval 1", "00:00:00", "08:00:00"), ("interval 2", "08:00:00", "24:00:00") ] # 待计算的起止时间 time_start = pd.to_timedelta("06:30:00") time_end = pd.to_timedelta("13:00:00") # 逐个区间计算交集分钟数 result = {} for interval_name, int_start, int_end in preset_intervals: int_start_td = pd.to_timedelta(int_start) int_end_td = pd.to_timedelta(int_end) # 交集起始为两个起始时间的较大值,交集结束为两个结束时间的较小值 overlap_start = max(time_start, int_start_td) overlap_end = min(time_end, int_end_td) # 无交集时结果为0 minutes = max(0, (overlap_end - overlap_start).total_seconds() / 60) result[interval_name] = int(minutes) # 输出结果 for k, v in result.items(): print(f"{k} = {v} minutes")
运行输出
interval 1 = 90 minutes interval 2 = 300 minutes
DataFrame批量计算代码示例
如果需要对DataFrame中的多行起止时间批量计算,可封装为函数使用apply处理:
import pandas as pd preset_intervals = [ ("interval_1", "00:00:00", "08:00:00"), ("interval_2", "08:00:00", "24:00:00") ] def calc_interval_minutes(row): start = row["time_start"] end = row["time_end"] res = [] for _, int_start, int_end in preset_intervals: int_start_td = pd.to_timedelta(int_start) int_end_td = pd.to_timedelta(int_end) overlap_start = max(start, int_start_td) overlap_end = min(end, int_end_td) res.append(int(max(0, (overlap_end - overlap_start).total_seconds()/60))) return pd.Series(res) # 示例DataFrame,先将时间列转为Timedelta格式 df = pd.DataFrame({ "time_start": ["06:30:00", "22:00:00", "09:00:00"], "time_end": ["13:00:00", "02:00:00", "17:00:00"] }) df[["time_start", "time_end"]] = df[["time_start", "time_end"]].apply(pd.to_timedelta) # 批量计算结果写入新列 df[["interval1_min", "interval2_min"]] = df.apply(calc_interval_minutes, axis=1)
内容的提问来源于stack exchange,提问作者Denisse
相关产品推荐
相关产品推荐

