Python实现全年小时时序数据按24小时分组求和并筛选最大行
Python实现按日分组筛选小时级时间序列数据
需求说明
现有3行×8760列的小时分辨率时间序列数据(3个序列,全年8760小时),需要按每24列(1天)为一组完成以下操作:
- 计算每组内每行的24小时求和值
- 筛选出每组求和值最大的行,提取该行对应的24列数据
- 将所有组的结果拼接成最终的完整时间序列
示例验证
先通过小数据示例验证逻辑正确性:
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
相关产品推荐
相关产品推荐

