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

基于时间戳合并不同时间间隔的GPS与NO2浓度DataFrame

Hey there! 这个时间序列合并的需求很常见,用pandas就能轻松解决,我给你分几种实用的场景来拆解,你可以根据自己的分析目标来选:

先做准备工作:确保索引是标准datetime类型

不管用哪种方法,第一步得把两个DataFrame的时间索引转换成pandas可识别的datetime类型,而且要排序(很多时间序列操作要求有序索引):

import pandas as pd

# 转换并排序GPS数据的索引
df_gps.index = pd.to_datetime(df_gps.index)
df_gps = df_gps.sort_index()

# 转换并排序NO2数据的索引
df_no2.index = pd.to_datetime(df_no2.index)
df_no2 = df_no2.sort_index()

场景1:保留NO2的高频数据,匹配最近的GPS坐标

如果你的需求是每一条NO2数据都对应一个GPS位置(比如要绘制每个NO2采样点的空间分布),用merge_asof绝对是最佳选择——它专门用来处理异步时间序列的合并,能给每个NO2的时间点匹配最近的GPS数据:

# 匹配每个NO2时间点之前最近的GPS数据(direction='backward')
merged_df = pd.merge_asof(
    df_no2, 
    df_gps, 
    left_index=True, 
    right_index=True, 
    direction='backward'
)

# 可选:如果你想匹配之后最近的GPS数据,把direction改成'forward'
# 或者想匹配距离最近的(不管前后),用direction='nearest'

这种方式不会丢失任何NO2的高频数据,每个采样点都能拿到对应的GPS坐标,非常适合时空关联分析。

场景2:将NO2聚合到GPS的3秒时间间隔上

如果你的分析更关注GPS的时间节点(比如想看每个GPS位置对应的NO2平均浓度),那就把高频的NO2数据聚合到GPS的3秒间隔上:

# 方法1:直接重采样NO2到3秒间隔,用均值聚合(也可以用first/last/max等)
df_no2_resampled = df_no2.resample('3S').mean()
# 合并GPS和重采样后的NO2,丢弃无匹配的行
merged_df = pd.concat([df_gps, df_no2_resampled], axis=1).dropna()

# 方法2:按GPS的时间点分组,聚合每个时间窗口内的NO2数据
# 适合GPS间隔不是严格3秒的情况
merged_df = df_no2.groupby(pd.cut(df_no2.index, bins=df_gps.index)).mean()
# 把分组后的区间索引换成GPS的时间点
merged_df.index = df_gps.index[:-1]

这种方式得到的最终数据和GPS的时间间隔完全一致,方便按GPS位置做浓度分析。

一些关键注意事项

  • 一定要确保索引是排序后的datetime类型:merge_asof和重采样操作都依赖有序的时间索引,否则会报错或得到错误结果。
  • 缺失值处理:合并后可能会有少量缺失值(比如GPS时间范围外的NO2数据),可以用merged_df.fillna(method='ffill')向前填充,或者根据业务逻辑选择填充方式。
  • 选择哪种合并方式,核心看你的分析目标:要保留高频细节选场景1,要对齐GPS时间粒度选场景2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:22:07