问题描述
我有一系列值 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 = 24
、hour
也是 24 并且 year_day
保持为 1 时。然后当 i
是紧随其后的下一个值时找到倍数,hour
从 1 重新开始,year_day
递增 1。换句话说,每次到达午夜时,hour = 24
和 year_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