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

如何在Pandas中基于分钟级时间匹配计算两气象站点的温度差值

没问题,这个需求完全可以实现,我来给你一步步拆解怎么做:

核心思路

我们的目标是把同一分钟内两个站点的温度关联起来,然后计算差值。核心就是先把时间戳统一到分钟级别,再把数据转成方便对比的格式。

步骤1:把时间戳转成分钟精度

首先得确保你的Time列是Pandas的datetime类型,然后把所有时间戳向下取整到分钟——这样不管秒数是多少,同一分钟的记录都会被归到同一个时间点。

import pandas as pd

# 假设你的数据集叫df
df['Time_minute'] = pd.to_datetime(df['Time']).dt.floor('min')

步骤2:把数据转成“宽格式”

用pivot方法把长格式的数据转成宽格式,这样每个分钟对应的station_a和station_b温度会在同一行,直接就能做减法了。

df_wide = df.pivot(index='Time_minute', columns='Station_name', values='Temperature')

转完之后的结构大概是这样:

Time_minutestation_astation_b
2022-05-12 22:09:00+00:0018.318.0

步骤3:计算温度差值

现在直接新增一列,用station_a的温度减去station_b的就行。如果遇到某分钟只有一个站点的数据(虽然你说每10分钟测一次,这种情况可能不多),可以用fillna处理缺失值,比如填充0或者用前一分钟的差值:

df_wide['temp_diff'] = df_wide['station_a'] - df_wide['station_b']

# 可选:处理缺失值的方式
# df_wide['temp_diff'] = df_wide['temp_diff'].fillna(method='ffill')  # 用前值填充
# df_wide['temp_diff'] = df_wide['temp_diff'].fillna(0)  # 填充0

步骤4(可选):转回长格式

如果之后需要保持原来的长结构,可以把宽格式再转回去:

df_long = df_wide.reset_index().melt(
    id_vars=['Time_minute', 'temp_diff'],
    var_name='Station_name',
    value_name='Temperature'
)

完整测试代码

我用你给的示例数据写了完整代码,你可以直接跑:

import pandas as pd

# 你的示例数据
data = {
    'Time': ['2022-05-12 22:09:35+00:00', '2022-05-12 22:09:42+00:00'],
    'Station_name': ['station_a', 'station_b'],
    'Temperature': [18.3, 18.0]
}
df = pd.DataFrame(data)

# 步骤1:统一时间到分钟
df['Time_minute'] = pd.to_datetime(df['Time']).dt.floor('min')

# 步骤2:转宽格式
df_wide = df.pivot(index='Time_minute', columns='Station_name', values='Temperature')

# 步骤3:计算差值
df_wide['temp_diff'] = df_wide['station_a'] - df_wide['station_b']

print(df_wide)

运行后输出结果:

Station_name          station_a  station_b  temp_diff
Time_minute                                          
2022-05-12 22:09:00+00:00      18.3       18.0        0.3

额外提示

  • 如果同一分钟内某个站点有多条数据(比如重复测量),可以先按分钟和站点分组取均值/最大值,再转宽格式:
df_agg = df.groupby(['Time_minute', 'Station_name'])['Temperature'].mean().reset_index()
df_wide = df_agg.pivot(index='Time_minute', columns='Station_name', values='Temperature')
  • 要是遇到某分钟只有一个站点的数据,temp_diff会是NaN,你可以根据业务需求选择删除这些行、填充0或者插值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:02:34