Возвращать значения для столбца в пандах (питоне) в зависимости от значений (времени) другого столбца - PullRequest
0 голосов
/ 07 июня 2018
Time            Shift
00:01 -6:00 First Shift
06:01 -12:00    Second Shift
12:01 -18:00    Third Shift
18:01 -24:00    Fourth Shift

Данные

DEP TIME    Shift
6:00    
7:45    
9:50    
12:05   
18:20   
21:15   
22:55   
6:00    
18:45   
21:30   

def shift (row):
   if row['DEP TIME'] >= "0:00" and row['DEP TIME'] <= "4:00":
      return 'Ist'
   if row['DEP TIME'] > "4:00"  and row['DEP TIME'] <= "8:00" :
      return '2nd'
   if row['DEP TIME'] > "8:00" and row['DEP TIME']  <= "10:01":
      return '3rd'   
   return 'Other'

df.apply (lambda row: shift (row),axis=1)

Мое наблюдение состоит в том, что, если я даю значение больше 10:00, если условие не работает.Есть какое-то ограничение по значению для типа данных?

1 Ответ

0 голосов
/ 07 июня 2018

Используйте pd.cut для бининга, но сначала преобразуйте значения to_timedelta:

bins = pd.to_timedelta(df1['Time'].str.split('-').str[1].add(':00'))
bins = pd.Series(pd.Timedelta(0)).append(bins)

df['DEP TIME'] = pd.to_timedelta(df['DEP TIME'].add(':00'))
df['Shift'] = pd.cut(df['DEP TIME'], bins=bins, labels=df1['Shift'])
print (df)
  DEP TIME         Shift
0 06:00:00   First Shift
1 07:45:00  Second Shift
2 09:50:00  Second Shift
3 12:05:00   Third Shift
4 18:20:00  Fourth Shift
5 21:15:00  Fourth Shift
6 22:55:00  Fourth Shift
7 06:00:00   First Shift
8 18:45:00  Fourth Shift
9 21:30:00  Fourth Shift
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...