Добавьте «1» в ячейку, если значение находится между двумя значениями Python Pandas - PullRequest
1 голос
/ 05 мая 2020

Я импортировал файл Excel во фрейм данных, в котором есть столбец «Открыто», в котором указаны дата и время, когда что-то было открыто.

Я хочу иметь новый столбец с надписью «07: 01 - 09:00» и каждую строку, в которой есть открытое время между этим временем, я хочу добавить «1» в той же строке в столбце .

Пока что у меня есть это

Opened                            
2020-04-14 14:45:58 
2020-04-07 17:53:49 
2020-04-07 07:10:14 
2020-04-06 23:11:13 

Я хочу

Opened                07:01 - 09:00              
2020-04-14 14:45:58 
2020-04-07 17:53:49 
2020-04-07 07:10:14         1
2020-04-06 23:11:13 

Итак, ячейки, которые не содержат времени между тем, что указано в столбце не получит "1" в ячейке.

Те, которые делают, будут.

Какой-то код

import pandas as pd
data = pd.read_excel('opened.xlsx')
fmt = '%m/%d/%Y %H:%M:%S'

data['Opened'] = pd.to_datetime(data['Opened'],
                                     format=fmt,
                                     errors='coerce')



Ответы [ 2 ]

3 голосов
/ 05 мая 2020

установите дату в качестве индекса и используйте pandas between_time , чтобы получить значения ur:

df = df.set_index('Opened')

df.loc[df.between_time('07:01','09:00').index, '07:01 - 09:00'] = 1


                      07:01 - 09:00
Opened  
2020-04-14 14:45:58          NaN
2020-04-07 17:53:49          NaN
2020-04-07 07:10:14          1
2020-04-06 23:11:13          NaN
1 голос
/ 05 мая 2020

Используйте DatetimeIndex.indexer_between_time для раз, а затем проверьте numpy.in1d для тестовых позиций:

idx = df.set_index('Opened').index.indexer_between_time('07:01','09:00')

#if default index RangeIndex
#df['07:01 - 09:00'] = df.index.isin(idx).astype(int)
#any index
df['07:01 - 09:00'] = np.in1d(np.arange(len(df)), idx).astype(int)
print (df)
               Opened  07:01 - 09:00
0 2020-04-14 14:45:58              0
1 2020-04-07 17:53:49              0
2 2020-04-07 07:10:14              1
3 2020-04-06 23:11:13              0

Или, если нужны пустые значения (смешанные данные в вывод, поэтому возможны проблемы при следующей обработке) возможно используйте numpy.where:

df['07:01 - 09:00'] = np.where(np.in1d(np.arange(len(df)), idx), 1, '')
print (df)
               Opened 07:01 - 09:00
0 2020-04-14 14:45:58              
1 2020-04-07 17:53:49              
2 2020-04-07 07:10:14             1
3 2020-04-06 23:11:13              
...