Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas between_time boolean

Tags:

python

pandas

I'm trying to create a column that will assign true if row value falls between the times 09:00 and 17:00.

I can select those times easily enough using between_time but can't assign a new column a True, False.

df = df.between_time('9:00', '17:00', include_start=True, include_end=True)

This statement selects the appropriate rows, but I can't assign a True-False value to them.

I've been trying to use np.where.

df['day'] = np.where(df.between_time('9:00', '17:00', include_start=True, include_end=True),'True','False')

Except that np.where only works on boolean expressions.

I've used it like this:

df['day'] = np.where((df['dayTime'] < '09:00') & (df['dayTime'] > '17:00'),'True','False')

But only gotten False returns, because a value can't be greater than 17 and less than 9 at the same time.

I'm missing a relatively easy step and can't figure it out. Help.

like image 625
hselbie Avatar asked Sep 23 '26 17:09

hselbie


1 Answers

You could do something like the following:

df.index.isin(df.between_time('9:00', '17:00', include_start=True, include_end=True).index)

Because the between method returns a dataframe, rather than a boolean array we can call .index on it as we could with any dataframe, this will return a series of times. We can then check wether or not our original time indices are in our time indices resulting from the between method.

This will give you a boolean array of values that are within your time frame. I can't think of another way to do this, but that doesn't mean there isn't one

like image 153
johnchase Avatar answered Sep 26 '26 06:09

johnchase