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

Pandas:分组DataFrame中查找最值对应的原始时间戳

解决方法:按日分组获取温度最值及对应时间戳

嘿,这个需求用Pandas的分组聚合就能轻松实现,核心是利用idxmax()/idxmin()找到组内最值的位置,再提取对应的时间戳就行。下面给你两种实用的方案,适合不同场景:

方案一:用apply处理分组(直观易读)

如果你的数据量不是特别大,这种方式最容易理解,每个分组的逻辑一目了然:

import pandas as pd

# 第一步:确保timestamp是datetime类型(如果还不是的话)
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 按日期分组,计算每日最值及对应时间戳
daily_stats = df.groupby(df['timestamp'].dt.date).apply(
    lambda group: pd.Series({
        'Tmax': group['T-C'].max(),
        'Tmax_timestamp': group['timestamp'].iloc[group['T-C'].idxmax()],
        'Tmin': group['T-C'].min(),
        'Tmin_timestamp': group['timestamp'].iloc[group['T-C'].idxmin()]
    })
)

说明:

  • groupby(df['timestamp'].dt.date):把数据按日期(忽略时分秒)分组
  • 每个group就是当天的子DataFrame,用group['T-C'].idxmax()拿到组内温度最高值的位置索引,再用iloc取出对应的时间戳
  • 如果某天有多个相同的最值(比如你样本里1月2日00:00和01:00都是1.1℃),idxmax()会返回第一个出现的位置,符合常规需求

方案二:用agg聚合(高效适合大数据)

如果你的数据量很大(数千条甚至更多),agg的效率比apply更高,推荐用这种方式:

import pandas as pd

# 第一步:转换时间格式并新增日期列
df['timestamp'] = pd.to_datetime(df['timestamp'])
df['date'] = df['timestamp'].dt.date

# 聚合计算
daily_stats = df.groupby('date').agg(
    Tmax=('T-C', 'max'),
    Tmin=('T-C', 'min'),
    Tmax_timestamp=('timestamp', lambda x: x[df.loc[x.index, 'T-C'] == x.max()].iloc[0]),
    Tmin_timestamp=('timestamp', lambda x: x[df.loc[x.index, 'T-C'] == x.min()].iloc[0])
)

说明:

  • 新增date列是为了分组更直观,和直接用dt.date分组效果一致
  • 聚合函数里的lambda逻辑:先筛选出组内温度等于最值的行,再取第一个对应的时间戳

结果示例

针对你提供的样本数据,最终得到的daily_stats会是这样的结构:

dateTmaxTmax_timestampTminTmin_timestamp
2015-01-01-2.02015-01-01 05:00:00-2.52015-01-01 00:00:00
2015-01-021.12015-01-02 00:00:000.52015-01-02 03:00:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:43:36