Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环通过天数来汇总按月份分组的总数_Python_Loops - Fatal编程技术网

Python循环通过天数来汇总按月份分组的总数

Python循环通过天数来汇总按月份分组的总数,python,loops,Python,Loops,我试图根据月份对日期列表进行分组,例如,第1天到第31天是一月,依此类推。以下是一些输入数据: Day 1: -109.743833 Day 2: -59.743030 Day 3: -149.539798 Day 4: -134.004097 Day 5: -101.911757 Day 6: -64.655886 Day 7: 38.683420 Day 8: 14.493554 Day 9: -52.823889 Day 10: -16.754896 Day 11: 27.648000 D

我试图根据月份对日期列表进行分组,例如,第1天到第31天是一月,依此类推。以下是一些输入数据:

Day 1: -109.743833
Day 2: -59.743030
Day 3: -149.539798
Day 4: -134.004097
Day 5: -101.911757
Day 6: -64.655886
Day 7: 38.683420
Day 8: 14.493554
Day 9: -52.823889
Day 10: -16.754896
Day 11: 27.648000
Day 12: -8.978296
Day 13: 3.077756
Day 14: 8.925626
Day 15: -13.099969
Day 16: 36.508620
Day 17: -20.888302
Day 18: 2.014708
Day 19: 52.070549
Day 20: 14.389047
Day 21: 46.281278
Day 22: 6.589799
Day 23: 14.849905
Day 24: 21.924614
Day 25: -19.006338
Day 26: -16.249006
Day 27: 41.147836
Day 28: 25.397426
Day 29: 45.358489
Day 30: 129.366465
Day 31: 129.377892
Day 32: -16.628081
Day 33: 56.484472
Day 34: 73.509385
Day 35: 119.484387
Day 36: -21.506795
Day 37: -16.499800
Day 38: -17.491308
Day 39: 140.532548
Day 40: -8.470736
Day 41: 203.523499
我正试图把它的总数按月份分组汇总。这是我打印出上述内容的代码:

print('Day %d: %f' % (day, inverted))
我想手动做一个if-else语句来总结它们,但我认为这不是一个好主意。有没有更好的办法

谢谢

编辑

dataset = list()
for yhat in forecast
    print('Day %d: %f' % (day, inverted))
    temp = str(day) + ':' + str(inverted)
    dataset.append(temp)

假设您的输入是在字典中,以整数日为键

{1: -109.743833, 2: -59.743030, ...}
我们可以使用这些键来构建日期字符串,然后使用该方法来解释它们。然后,我们可以从
datetime
对象中提取月份

from collections import defaultdict
from datetime import datetime    

month_groups = defaultdict(list)
year = 2018

for day, value in day_dict.items():
    month = datetime.strptime('{:0>3}-{}'.format(day, year), '%j-%Y').month
    month_groups[month].append(value)

如果有更好的方法可以做到这一点,我不会感到惊讶,因此您可能希望在和模块中再次检查,看看是否可以找到我遗漏的内容

根据给定的年份将日期转换为月份,然后使用字典逐月分组:

from datetime import datetime
from datetime import timedelta
from collections import defaultdict

year = 2018
data = [
    (32, -16.628081),
    (33, 56.484472),
    ...
]

base = datetime(year, 1, 1)
res = defaultdict(float)
for month, val in (((base + timedelta(day - 1)).month, inverted) for day, inverted in data):
    res[month] += val

print(res)

你知道那一年吗?这对leap来说很重要days@PatrickHaugh年份设置为当前年份!你是怎么做到的?熊猫?@guest176969您可以使用
split
第一天更改为
1
<代码>'{:0>3}-{}'.format(day.split()[-1],year)
Hey在稍微修改后,我成功地执行了上面的解决方案。但是,当我尝试使用print(month_groups)打印排序后的列表时,它会打印出很多值。有没有办法只打印出每个月的总数?
month\u group
中的每个值都将是该月的值列表。所以你可以做一些类似于
sum(month\u groups[1])
的事情来得到一月份的总数。嗯,我试过sum(month\u groups[1])、sum(month\u groups[2])等等,但都打印出了相同的值,尽管我注意到上面代码中有一个错误。我忘了在调用
strtime
后包含
.month
。再次尝试该更改,应该会有所帮助(我打赌您得到的值是0)嘿,有没有办法将编辑部分中的日期和反转变量填充到您的格式中?@guest176969您的输入是一个包含字符串的iterable,如
day 35:119.484387
?它与日期和反转变量一样:print('Day%d:%f'(Day,倒过来))@guest176969那么
数据就是您输入的格式。