Я хочу узнать, день это или ночь, из столбца «метка времени» в моем фрейме данных. Столбцы отметок времени имеют следующие значения: 20: 0, 14:30, 6:15, 5: 0, 4: 0 и т. Д.

Я использовал цикл for, но он генерировал случайно день и ночь.

for x in data['timestamp']:
if x> '12:00':
     print('Day')

 else:
     print('Night')

Я хочу столбец рядом с моим столбцом отметки времени, который имеет значения как «День», когда отметка времени находится между 6:00 и 18:00, и «Ночь», когда отметка времени находится между 18:01 и 5:59.

0
tired coder 26 Июн 2019 в 08:14

3 ответа

Лучший ответ

Преобразуйте значения в timedeltas с помощью to_timedelta и сравните с помощью Series.between, а затем создайте новый столбец с помощью {{X2} } :

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
1
jezrael 26 Июн 2019 в 05:31

Я бы взял часть часов, проанализировал ее как int и проверил, что между 6 и 18:

hour = int(x.split(':'))[0]
if hour >= 6 and hour < 18:
    print('Day')
else:
    print('Night')
0
Mureinik 26 Июн 2019 в 05:18
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")
1
Asif 26 Июн 2019 в 05:35