达到特定倍数后从范围中获取下一个值

问题描述

我有一系列值 i 从 1 开始迭代一年中的小时数 (8760)。对于每一小时,变量 hour 递增 1,直到达到 24重新启动。每达到 24 小时后,变量 year_day 增加 1。例如

i    hour    year_day
1    1    1
2    2    1
3    3    1
...
23    23  1
24    1   2
25    2   2
...
47    24  2
48    1   3
49    2   3

我正在努力做到当 i = 24hour 也是 24 并且 year_day 保持为 1 时。然后当 i 是紧随其后的下一个值时找到倍数,hour 从 1 重新开始,year_day 递增 1。换句话说,每次到达午夜时,hour = 24year_day 仍然是前一天.例如

i    hour    year_day
23    23  1
24    24  1
25    1   2
...
47    23  2
48    24  2
49    1   3

代码如下:

hour = 0
year_day = 1
for i in range(1,8761):
    hour = hour + 1
    if i % 24 == 0:
        hour = 1
        year_day = year_day + 1
    print(i,hour,year_day)

解决方法

你的代码没问题,你只需要以 hour=1 开头并在 if 语句之前打印。请尝试以下操作:

hour = 1
year_day = 1
for i in range(1,8761):
    print(i,hour,year_day)
    hour+=1
    if i % 24 == 0:
        hour = 1
        year_day = year_day + 1

输出:

...
21 21 1
22 22 1
23 23 1
24 24 1
25 1 2
26 2 2
27 3 2
...
,

我对这个问题使用了熊猫方法。代码如下:

import numpy as np
import pandas as pd

i = list(range(1,50))
df = pd.DataFrame(i,columns=["i"])
df["hours"] = df["i"]%24
df["hours"][df["hours"]==0] = 24
df["days"] = (df["i"]//24.1+1).astype(int)
display(df)

输出为:

    i   hours   days
0   1   1       1
1   2   2       1
2   3   3       1
3   4   4       1
4   5   5       1
5   6   6       1
6   7   7       1
7   8   8       1
8   9   9       1
9   10  10      1
10  11  11      1
11  12  12      1
12  13  13      1
13  14  14      1
14  15  15      1
15  16  16      1
16  17  17      1
17  18  18      1
18  19  19      1
19  20  20      1
20  21  21      1
21  22  22      1
22  23  23      1
23  24  24      1
24  25  1       2
25  26  2       2
26  27  3       2
27  28  4       2
28  29  5       2
29  30  6       2
30  31  7       2
31  32  8       2
32  33  9       2
33  34  10      2
34  35  11      2
35  36  12      2
36  37  13      2
37  38  14      2
38  39  15      2
39  40  16      2
40  41  17      2
41  42  18      2
42  43  19      2
43  44  20      2
44  45  21      2
45  46  22      2
46  47  23      2
47  48  24      2
48  49  1       3
,
hour = 0
year_day = 1
for i in range(1,8761):
    if i % 24 == 0:
        hour = 0
        year_day += 1
    hour += 1
    print(i,year_day)

返回:

20 20 1
. . .
24 1 2
25 2 2
. . .
46 23 2
47 24 2
48 1 3