【发布时间】:2022-01-06 18:15:17
【问题描述】:
我仍在学习 Python,有时我的编码效率不是很高。我正在寻找一种更有效的方法来按“每小时”对数据输入进行充分分组。这是测量每小时的生产量,而不是每小时生产量的平均值(是的,我知道这要简单得多。举个例子,如果我在 4:30-5:30 和 5:30-6 之间做了 32 次:30 我做了 58 次,这两个时间框架不会是每小时生产的平均值,但会保持不变,这是我需要的。它必须适合的时间框架是 (4:30-5:30, 5:30-6:30, 6:30-7:30, 7:30-8:30, 8:30-9:30, 9:30-10:30, 11:00-12:00, 12:00-1:00, 1:00-2:00, 2:00-3:00, 3:00-4:00, 4:00-5:00, 5:00-6:00, 6:00-7:00, 7:30-8:30, 8:30-9:30, 9:30-10:30, 10:30-11:30, 11:30-12:30, 12:30-1:30)。我已经具有用于将数据输入 excel 的 GUI。我有两列标记为 *"Time" and "Date",Time 是我操纵小时和分钟的地方。
a_list = [2,3,4,5,6,7,8,9,10,11]
b_list = [11,12,13,14,15,16,17,18,19]
c_list = [19,20,21,22,23,0]
date = dt.datetime.now()
#hm = float(date.strftime('%H.%M'))
#hour = float(date.strftime('%H'))
hour = float(5) #testing
hm = float(5.30) #testing
for i in a_list:
if hour in a_list:
if hour < 5:
hour = 5
a ="{:.2f}".format(hour)
print(f'Test 1:{a}')
break
if hour+.5 >= 5.5 and hour <10:
if hm >= hour +.3:
a ="{:.2f}".format(hour+1)
print(f'Test 2: {a}')
else:
a ="{:.2f}".format(hour)
print(f'Test 3: {a}')
if hour >= 10:
hour = 10
a ="{:.2f}".format(hour)
print(f'Test 4: {a}')
break
我还没有为其他列表添加任何代码。我正在寻找比这里更好的想法。我考虑了日期范围,但可能会遇到麻烦。这是其中两列的参考图片:
【问题讨论】:
-
我建议在您的 excel 源数据中使用适当的时间戳值,并在您的 python 代码中使用datetime,而不是重新实现时间计算。除非这是您的目标(例如,出于教育目的)。
-
@blurryroots 我可能无法理解它,但在此之前我确实使用了日期时间,我无法按照我需要的方式对数据进行分组。我可能只是不知道这样做的方法,但例如 2022-01-06 4:30:00 和 2022-01-06 4:45:00 需要在 4:30-5:30 下组合在一起。我试图避免像上面的代码这样的 1000 个 if 语句以及具有较少“步骤”的语句。此表中还有其他列,而不仅仅是两列。
标签: python pandas python-datetime