hselbie
hselbie

Reputation: 1879

Pandas between_time boolean

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.

Upvotes: 3

Views: 2347

Answers (1)

johnchase
johnchase

Reputation: 13705

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

Upvotes: 6

Related Questions