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

如何用Python合并多卫星重叠的日期时间区间并统计时长

时间区间重叠合并实现方案

方案说明

你需要的区间合并功能没有完全直接的pandas内置单行函数,但可以通过pandas基础能力快速实现,不需要额外安装第三方库。

实现步骤

  • 读取所有卫星的原始数据,合并为同一个DataFrame,将起止时间列转换为pandas datetime类型
  • 按开始时间对所有区间做升序排序
  • 遍历排序后的区间,合并所有重叠或前后衔接的区间
  • 基于合并后的起止时间重新计算时长

完整代码示例

import pandas as pd

# 1. 读取多份卫星数据并合并
# 以下为示例数据,实际使用时替换为读取你的本地文件即可
data1 = [
    [450.61717646411466, '2022-01-01 13:11:18.686564', '2022-01-01 13:18:49.303741'],
    [272.9796195817538, '2022-01-01 14:45:04.846243', '2022-01-01 14:49:37.825862']
]
data2 = [
    [576.600683837155, '2022-01-01 13:06:51.364924', '2022-01-01 13:16:27.965608'],
    [568.5843137051123, '2022-01-01 14:40:38.840363', '2022-01-01 14:50:07.424677']
]
cols = ['Duration (s)', 'Start Time (UTC)', 'Stop Time (UTC)']
df1 = pd.DataFrame(data1, columns=cols)
df2 = pd.DataFrame(data2, columns=cols)
# 多文件批量读取可替换为:
# df = pd.concat([pd.read_csv(文件路径, sep='\s+') for 文件路径 in 你的文件路径列表], ignore_index=True)
df = pd.concat([df1, df2], ignore_index=True)

# 2. 转换时间类型并按开始时间排序
df['Start Time (UTC)'] = pd.to_datetime(df['Start Time (UTC)'])
df['Stop Time (UTC)'] = pd.to_datetime(df['Stop Time (UTC)'])
df = df.sort_values('Start Time (UTC)').reset_index(drop=True)

# 3. 合并重叠区间
merged_intervals = []
if not df.empty:
    current_start, current_end = df.iloc[0][['Start Time (UTC)', 'Stop Time (UTC)']]
    for _, row in df.iloc[1:].iterrows():
        if row['Start Time (UTC)'] <= current_end:
            # 区间重叠,更新结束时间为两者最大值
            current_end = max(current_end, row['Stop Time (UTC)'])
        else:
            # 区间不重叠,保存当前区间后切换为新的区间
            merged_intervals.append((current_start, current_end))
            current_start, current_end = row['Start Time (UTC)'], row['Stop Time (UTC)']
    # 补充保存最后一个区间
    merged_intervals.append((current_start, current_end))

# 4. 生成结果表并重新计算时长
result = pd.DataFrame(merged_intervals, columns=['Start Time (UTC)', 'Stop Time (UTC)'])
result['Duration (s)'] = (result['Stop Time (UTC)'] - result['Start Time (UTC)']).dt.total_seconds()
# 调整列顺序和要求一致
result = result[['Duration (s)', 'Start Time (UTC)', 'Stop Time (UTC)']]

# 输出查看结果
print(result)
# 保存到本地文件:result.to_csv('merged_result.csv', index=False)

结果验证

运行上述代码得到的输出和预期逻辑完全匹配:

Duration (s)         Start Time (UTC)          Stop Time (UTC)
0    717.938817 2022-01-01 13:06:51.364924 2022-01-01 13:18:49.303741
1    568.584314 2022-01-01 14:40:38.840363 2022-01-01 14:50:07.424677

注:示例期望的第一个时长数值为手动近似值,代码输出为精确时间差计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:05