簡體   English   中英

計算日期值是否出現在兩個不同的時間之間python pandas

[英]calculate if date value occurs between two different times python pandas

我正在嘗試創建一個新列,以確定行值是否在“營業時間之間”。 為此,我嘗試使用時間間隔功能。 如果有更簡單的方法,我不需要使用它。

我有一個數據 ,其中包含“ Date”“ StartHour”“ End Hour”的列

題:

我想給一個“真”或“假”,如果在“ 日期 ”一欄中的時間是“StartHour”之間'EndHour的時間。

import pandas as pd
import numpy as np

#create dataframe with dates
d = {'Date': ['2016-11-17 05:01:45','2011-01-04 16:34:00','2011-01-05 09:25:45',
              '2011-01-10 12:00:45','2011-01-14 07:05:45','2011-01-15 10:19:00',
              '2011-01-17 13:59:45','2011-01-19 18:39:45','2011-01-22 06:19:45'], 
     'StartHour': ['16:00','16:00','16:00','16:00','16:00','16:00','16:00','16:00','16:00'],
     'EndHour': ['10:00','10:00','10:00','10:00','10:00','10:00','10:00','10:00','10:00'],
     'Station_ID': ['A','A','A','A','B','B','B','B','B']}
df = pd.DataFrame(data=d)
#convert date column to datetime
df['Date'] = df['Date'].values.astype('datetime64[ns]')


#************************
# set index to Date (need for 'between_time')
df = df.set_index('Date')

# run calculation for between time
df['between_business_hours'] = df.index.isin(df.between_time('16:00', '10:00', include_start=True, include_end=True).index)


df

我已經使用between_time函數計算了一個列,但這只允許我使用硬編碼值作為開始時間和結束時間。 我想使用“ StartTime”和“ EndTime”列中的值。 我可能通過使用between_time函數使此操作比需要的更加困難。

我希望輸出看起來像這樣。

                    EndHour StartHour   Station_ID  between_business_hours
Date                
2016-11-17 05:01:45  10:00   16:00       A            True
2011-01-04 16:34:00  10:00   16:00       A            True
2011-01-05 09:25:45  10:00   16:00       A            True
2011-01-10 12:00:45  10:00   16:00       A            False
2011-01-14 07:05:45  10:00   16:00       B            True
2011-01-15 10:19:00  10:00   16:00       B            False
2011-01-17 13:59:45  10:00   16:00       B            False
2011-01-19 18:39:45  10:00   16:00       B            True
2011-01-22 06:19:45  10:00   16:00       B            True

任何幫助表示贊賞

您不需要設置index

df.Date.dt.strftime('%H:%M').between(df.StartHour,df.EndHour)
Out[297]: 
0    False
1     True
2     True
3     True
4    False
5     True
6     True
7     True
8    False
dtype: bool

更新

l=[df.loc[[y],:].index.indexer_between_time(df.loc[y,'StartHour'],df.loc[y,'EndHour'])==0 for y in df.index]
df['New']=l
df.New=df.New.str[0].fillna(False)
df
                    EndHour StartHour Station_ID    New
Date                                                   
2016-11-17 05:01:45   10:00     16:00          A   True
2011-01-04 16:34:00   10:00     16:00          A   True
2011-01-05 09:25:45   10:00     16:00          A   True
2011-01-10 12:00:45   10:00     16:00          A  False
2011-01-14 07:05:45   10:00     16:00          B   True
2011-01-15 10:19:00   10:00     16:00          B  False
2011-01-17 13:59:45   10:00     16:00          B  False
2011-01-19 18:39:45   10:00     16:00          B   True
2011-01-22 06:19:45   10:00     16:00          B   True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM