Python3如何为按日期排序的元组插入随日期递增的天数编号
Python 按连续日期递增编号实现方法
由于你的原始数据已经严格按插入顺序排列,同日期数据连续出现,不需要额外排序,以下两种实现都比手动裸写多层判断的for循环更简洁:
方案1:itertools.groupby 写法(代码最精简)
利用groupby自动聚合连续同键值元素的特性,直接按分组序号生成天数编号,不需要手动维护计数状态:
from itertools import groupby raw_data = [('06-08-22', 'otherData'), ('06-08-22',), ('06-08-22',), ('06-08-22',), ('06-08-22',), ('06-09-22',), ('06-09-22',), ('06-09-22',)] processed_data = [] # 枚举分组,天数编号从1开始 for day_num, (_, row_group) in enumerate(groupby(raw_data, key=lambda x: x[0]), start=1): for row in row_group: # 元组不可变,直接解包原有内容后拼接天数字段 processed_data.append((*row, day_num))
运行后输出完全匹配你的预期格式:第一个日期组所有行编号为1,第二个日期组所有行编号为2,以此类推。该写法自动兼容原始元组长度不一致的情况(比如部分行带其他业务字段,部分行只有日期),不需要额外判断行长度。
方案2:单次遍历写法(性能最优,适合超大数据集)
如果数据量达到十万、百万级,想要避免groupby的分组开销,可以用单次遍历维护状态的写法,本质是精简版的循环逻辑,没有多余计算:
raw_data = [('06-08-22', 'otherData'), ('06-08-22',), ('06-08-22',), ('06-08-22',), ('06-08-22',), ('06-09-22',), ('06-09-22',), ('06-09-22',)] processed_data = [] last_date = None day_counter = 0 for row in raw_data: current_date = row[0] # 日期变化时计数器+1 if current_date != last_date: last_date = current_date day_counter += 1 processed_data.append((*row, day_counter))
注意:以上两种方案都基于「同日期数据连续排列」的前提,和你描述的「数据顺序与插入顺序一致」的场景完全匹配,不需要提前排序。处理完的结果直接可以喂给matplotlib、seaborn等可视化库使用,不需要额外格式调整。
内容的提问来源于stack exchange,提问作者Marquise05
相关产品推荐
相关产品推荐

