我有一个 list :
t = [['01-2012', 3],
['02-2012', 2],
['03-2012', 9],
['04-2012', 1],
['05-2012', 6],
['06-2012', 40],
['07-2012', 3],
['08-2012', 282],
['09-2012', 3],
['12-2012', 6],
['02-2013', 16],
['04-2013', 9]]
我需要将所有缺失的 [mm-yyyy, value] 元素添加到此列表中各自的位置作为 [mm-yyyy, 0],以便平滑所有缺失月份的时间序列。有什么猜测吗?
现在我正在做的是计算所有 0 值,如下所示:
total_items = [0]*12
for d in t:
month = int(d[0].split('-')[0], 10)
total_items[month-1] = d[1]
所以这给了我所有的值,包括缺失月份为 0 的值,但我不确定如何为它们生成相应的 mm-yyyy 元素。任何帮助,将不胜感激。谢谢。
最佳答案
我认为一个更简单的解决方案是迭代范围内的月份和年份,并添加缺少的内容。
<小时/>如果您使用 dict
而不是两元素 list
的 list
,这会更容易,所以让我们先这样做。
data = dict(t)
for year in range(2012, 2014):
for month in range(1, 13):
mmyyyy = '{:02}-{:04}'.format(month, year)
data.setdefault(mmyyyy, 0)
<小时/>
然后,如果您想将其转换回原始格式,也很简单:
t = [[k, v] for k, v in data.items()]
<小时/>
如果您需要按日期排序......好吧,您的月份优先格式使之变得丑陋,但这当然是可行的:
t = sorted(t, key=lambda kv: kv[0][3:] + kv[0][:2])
但是,正如最后一行所示,将日期作为日期对象而不是字符串来处理通常要容易得多。因此,您可能也需要考虑这一点。
<小时/>但是,也许您最好保留 0 作为默认值,并通过循环数年和数月而不是循环遍历集合来处理它们,而不是插入 0?
关于python - 在 Python 列表中将缺失的月份值插入为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283984/