Reputation: 21
I want to find out whether it is day or night from the "timestamp" column in my data frame. The time stamp columns have values as follows: 20:0 , 14:30, 6:15, 5:0, 4:0 etc.
I used a for loop but it randomly generated day and night.
for x in data['timestamp']:
if x> '12:00':
print('Day')
else:
print('Night')
I want a column beside my timestamp column which has values as "Day" whenever the timestamp is between 6:00am to 18:00 and "Night" when the timestamp is between 18:01 to 5:59 am.
Upvotes: 0
Views: 1794
Reputation: 2331
timestamp = ['6:00', '18:00', '18:01', '5:59']
for time in timestamp:
hourMin = time.split(":")
hour = int(hourMin[0])
mint = int(hourMin[1])
if hour>= 6 and hour <= 18:
if(hour == 18):
if(mint > 0):
print("Night\n")
else:
print("Day\n")
else:
print("Day\n")
else:
print("Night\n")
Upvotes: 1
Reputation: 863256
Convert values to timedeltas with to_timedelta
and compare by Series.between
, then create new column by numpy.where
:
data = pd.DataFrame({
'timestamp' : ['6:00', '18:00', '18:01', '5:59'],
})
mask = (pd.to_timedelta(data['timestamp'] + ':00')
.between(pd.Timedelta('6h'),pd.Timedelta('18h')))
data['new'] = np.where(mask, 'Day', 'Night')
print (data)
timestamp new
0 6:00 Day
1 18:00 Day
2 18:01 Night
3 5:59 Night
Upvotes: 2
Reputation: 311893
I'd take the hours part, parse it as int, and check if it's between 6 and 18:
hour = int(x.split(':'))[0]
if hour >= 6 and hour < 18:
print('Day')
else:
print('Night')
Upvotes: 0