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

Python实现全年小时时序数据按24小时分组求和并筛选最大行

Python实现按日分组筛选小时级时间序列数据

需求说明

现有3行×8760列的小时分辨率时间序列数据(3个序列,全年8760小时),需要按每24列(1天)为一组完成以下操作:

  1. 计算每组内每行的24小时求和值
  2. 筛选出每组求和值最大的行,提取该行对应的24列数据
  3. 将所有组的结果拼接成最终的完整时间序列

示例验证

先通过小数据示例验证逻辑正确性:

import pandas as pd

# 示例输入(3行6列,对应3个序列、3个2小时组)
data = {
    0: [1, 0, 0],
    1: [2, 0, 0],
    2: [3, 4, 2],
    3: [4, 5, 6],
    4: [5, 6, 14],
    5: [6, 7, 0]
}
df = pd.DataFrame(data, index=['A', 'B', 'C'])

实现步骤

  • 生成分组标签:给每列标记所属的组(示例中每2列一组,全年数据则每24列一组)
  • 计算组内求和:按分组对每行的列数据求和
  • 确定每组最大行:找出每个组中求和值最高的行索引
  • 提取拼接数据:遍历每个组,提取对应行的列数据并拼接

完整代码

import pandas as pd

# 假设已完成数据导入,df为3行×8760列的DataFrame,索引为序列名称(如A/B/C)
# df = pd.read_csv(...)  # 替换为你的数据导入代码

# 1. 生成分组标签:每24列一组(全年共365组)
group_labels = df.columns // 24

# 2. 计算每行在每个组的求和值
group_sums = df.groupby(group_labels, axis=1).sum()

# 3. 获取每个组求和最大的行索引
max_rows_per_group = group_sums.idxmax(axis=0)

# 4. 提取并拼接所有组的目标数据
final_result = []
for group_num, target_row in max_rows_per_group.items():
    # 获取当前组的所有列
    group_cols = df.columns[group_labels == group_num]
    # 提取目标行的该组数据并加入结果
    final_result.extend(df.loc[target_row, group_cols].tolist())

# 最终结果转为元组(或按需转为列表、数组等格式)
final_result = tuple(final_result)

代码说明

  • group_labels = df.columns //24:利用整数除法给每列分配组号(0到364),实现按24小时分组
  • groupby(group_labels, axis=1):按列分组,跨行计算每组的求和值
  • idxmax(axis=0):按列(每个组)找出求和值最大的行索引
  • 遍历分组时,通过group_labels == group_num筛选出当前组的所有列,再提取对应行的原始小时数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:43:24