我需要在python中执行此任务的时间函数:A%= B * C仅适用于05:00h到00:00h之间的时间,否则为100%。
B C Time
30 3 13:00
23 4 14:00
...
43 2 22:00
...
24 3 01:00
我试过这个:
def A(B, C):
for Time in range(00:00, 00:00)
return B * C
else:
return 100%
但这不起作用,因为整数,我不能使用这种格式的时间。
答案 0 :(得分:1)
我认为您可以先转换to_timedelta
次,然后按between
创建遮罩。上次使用numpy.where
:
print (df)
B C Time
0 10 1 03:00
1 30 3 04:00
2 23 4 05:00
3 43 2 22:00
4 24 3 01:00
times = pd.to_timedelta(df.Time + ':00')
print (times)
0 03:00:00
1 04:00:00
2 05:00:00
3 22:00:00
4 01:00:00
Name: Time, dtype: timedelta64[ns]
mask = times.between('00:00:00','05:00:00')
print (mask)
0 True
1 True
2 True
3 False
4 True
Name: Time, dtype: bool
df['D'] = np.where(mask, 100, df.B * df.C)
print (df)
B C Time D
0 10 1 03:00 100
1 30 3 04:00 100
2 23 4 05:00 100
3 43 2 22:00 86
4 24 3 01:00 100