基于数据集指定列分组求同组数值最大最小差值的问题排查
代码问题原因
- 问题1:每组的最后一个元素未被加入临时列表
你的逻辑是只有当前行和下一行日期相同时,才会把当前行的数值加入temp_list,每组的最后一行和下一行日期不同,永远不会触发加入逻辑,导致每组少了最后一个值。比如第一组的23就没有被加入列表,你计算的是5、6、10的max-min=5,和你输出的第一个值一致。 - 问题2:最后一组数据未被处理
你的循环只遍历到倒数第二行,最后一组遍历结束后不会触发else分支的计算逻辑,所以结果里缺了最后一组的差值。 - 额外说明:你贴的代码里的
dataset和你问题里举的示例数据集不一致,这也是输出和预期对不上的原因之一。
修复后的代码(基于原有逻辑修改)
# 用你给出的预期输出对应的数据集 dataset = [[1,5],[1,6],[1,10],[1,23],[2,4],[2,8],[2,12],[3,10],[3,20],[3,40],[4,50],[4,500]] temp_list = [] daily_total = [] for i in range(len(dataset)): # 先把当前行的值加入临时列表 temp_list.append(dataset[i][1]) # 判断是不是最后一行,或者下一行和当前行日期不同 if i == len(dataset)-1 or dataset[i][0] != dataset[i+1][0]: max_ = max(temp_list) min_ = min(temp_list) daily_total.append(max_ - min_) temp_list = [] print(daily_total) # 输出 [18, 8, 30, 450],和预期一致
更简洁的实现方案(用itertools.groupby)
如果你的数据集已经按日期列排序好了,可以直接用分组工具,不用手动判断分组边界:
from itertools import groupby dataset = [[1,5],[1,6],[1,10],[1,23],[2,4],[2,8],[2,12],[3,10],[3,20],[3,40],[4,50],[4,500]] daily_total = [] # 按第一列分组 for date, group in groupby(dataset, key=lambda x: x[0]): values = [item[1] for item in group] daily_total.append(max(values) - min(values)) print(daily_total)
内容的提问来源于stack exchange,提问作者Musclemania05
相关产品推荐
相关产品推荐

