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

小时级DataFrame分析优化:如何高效关联不同时段阈值与数值?

问题描述

现有一份包含多日小时级数据的DataFrame,示例数据如下:

DATE      TIME  Threshold  Value
2022-11-04  02:00:00         10      9
2022-11-04  03:00:00         11     10  
2022-11-04  04:00:00         10     11  
2022-11-04  06:00:00         12     11  
2022-11-04  05:00:00         12     12  
2022-11-04  07:00:00         10     11  
2022-11-04  08:00:00         11     10  
2022-11-04  09:00:00         11      9  
2022-11-04  10:00:00         12      9  
2022-11-04  11:00:00         10     10  
2022-11-04  12:00:00         10     10
... 
2022-11-05  01:00:00         10      9
2022-11-05  02:00:00         11     10 
...

需要基于Threshold、Value与时间维度做分析,比如要筛选当日04:00的Threshold为10的记录,并获取这些记录对应的当日08:00的Value;未来还要分析其他时段组合。当前采用拆分合并DataFrame的方法操作繁琐,求更高效的实现方案。

高效实现方案

方法一:透视表预构建宽表(适合多时段重复查询)

先按日期分组,将小时时间转为列名,生成Threshold和Value的宽表,后续任意时段组合的查询都能直接通过索引和列名快速获取:

import pandas as pd

# 确保DATE和TIME为字符串类型(若原始数据不是则转换)
df['DATE'] = df['DATE'].astype(str)
df['TIME'] = df['TIME'].astype(str)

# 生成Threshold和Value的宽表,行是日期,列是小时时间
threshold_pivot = df.pivot(index='DATE', columns='TIME', values='Threshold')
value_pivot = df.pivot(index='DATE', columns='TIME', values='Value')

# 筛选04:00时Threshold为10的日期
target_dates = threshold_pivot[threshold_pivot['04:00:00'] == 10].index

# 获取对应日期08:00的Value
result = value_pivot.loc[target_dates, '08:00:00'].dropna()
print(result)

一次构建宽表后,后续查任何时段组合都无需重复预处理,效率极高。

方法二:定向关联查询(适合单次特定时段分析)

如果只是偶尔查询特定时段组合,直接通过日期关联两个筛选后的子表即可:

# 筛选04:00且Threshold为10的记录,仅保留日期列
condition_df = df[(df['TIME'] == '04:00:00') & (df['Threshold'] == 10)][['DATE']]

# 筛选08:00的Value记录
value_08_df = df[df['TIME'] == '08:00:00'][['DATE', 'Value']]

# 关联得到结果
result = pd.merge(condition_df, value_08_df, on='DATE', how='inner')
print(result)

代码简洁,针对单次查询的执行效率最优。

方法三:时间偏移关联(适合按小时差分析)

如果未来需要分析“某时段N小时后的数据”这类场景,先合并日期时间为datetime类型,再通过时间偏移做自关联:

# 合并DATE和TIME为完整时间戳
df['datetime'] = pd.to_datetime(df['DATE'] + ' ' + df['TIME'])

# 按日期分组并按时间排序(确保时间顺序正确)
df = df.sort_values('datetime').groupby('DATE', group_keys=False).apply(lambda x: x)

# 生成偏移4小时的时间列(04:00对应08:00,差4小时)
df['datetime_shift'] = df['datetime'] + pd.Timedelta(hours=4)

# 自关联匹配偏移后的Value
result = pd.merge(
    df[(df['TIME'] == '04:00:00') & (df['Threshold'] == 10)],
    df[['datetime', 'Value']],
    left_on='datetime_shift',
    right_on='datetime',
    how='inner'
)[['DATE', 'datetime_x', 'Threshold', 'datetime_y', 'Value']]
print(result)

扩展性强,可适配任意小时差的时段关联需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:20:28