在熊猫中如何根据特定的工作日和时间范围进行过滤

时间:2016-01-21 02:52:56

标签: python pandas

我的数据框看起来像这样。笔记本是here

     C/A  UNIT       SCP     DATEn     TIMEn    DESCn  ENTRIESn   EXITSn  
0   A002  R051  02-00-00  08-18-12  00:00:00  REGULAR   3759779  1297676   
1   A002  R051  02-00-00  08-18-12  04:00:00  REGULAR   3759809  1297680   
2   A002  R051  02-00-00  08-18-12  08:00:00  REGULAR   3759820  1297701   
3   A002  R051  02-00-00  08-18-12  12:00:00  REGULAR   3759879  1297799   
4   A002  R051  02-00-00  08-18-12  16:00:00  REGULAR   3760073  1297863   
5   A002  R051  02-00-00  08-18-12  20:00:00  REGULAR   3760367  1297920   
6   A002  R051  02-00-00  08-19-12  00:00:00  REGULAR   3760494  1297958   
7   A002  R051  02-00-00  08-19-12  04:00:00  REGULAR   3760525  1297962   
8   A002  R051  02-00-00  08-19-12  08:00:00  REGULAR   3760545  1297983   
9   A002  R051  02-00-00  08-19-12  12:00:00  REGULAR   3760603  1298048   
10  A002  R051  02-00-00  08-19-12  16:00:00  REGULAR   3760750  1298104   
11  A002  R051  02-00-00  08-19-12  20:00:00  REGULAR   3760982  1298137   
12  A002  R051  02-00-00  08-20-12  00:00:00  REGULAR   3761088  1298175   
13  A002  R051  02-00-00  08-20-12  04:00:00  REGULAR   3761098  1298186   
14  A002  R051  02-00-00  08-20-12  08:00:00  REGULAR   3761130  1298265 

此代码将过滤掉7月份

july_station = df[['COUNTn']]\
           [(df.DATETIMEn >= datetime.datetime.strptime('07-01-13', '%m-%d-%y')) &\
            (df.DATETIMEn <= datetime.datetime.strptime('07-31-13', '%m-%d-%y'))]\
            .groupby(df.UNIT)\
            .sum()

以上代码仅过滤了月份

如果我必须在午夜和午夜之间过滤掉条目怎么办? 2013年7月周五凌晨4点?这是正确的做法吗?

 july_station1 = df[['COUNTn']]\
               [(df.DATETIMEn >= datetime.datetime.strptime('07-01-13 00:00 5', '%m-%d-%y %H:%M %A')) &\
                (df.DATETIMEn <= datetime.datetime.strptime('07-31-13 04:00 5', '%m-%d-%y %H:%M %A'))]\
                .groupby(df.UNIT)\
                .sum()

1 个答案:

答案 0 :(得分:1)

如果您的列是日期时间列,则可以使用column.dt.weekday(星期一= 0,星期日= 6)和column.dt.hour获取工作日和小时。您还可以在系列中使用between来更优雅地进行范围比较:

df.DATEn = pd.to_datetime(df.DATEn)
df.TIMEn = pd.to_datetime(df.TIMEn)
mask = (df.DATEn == 4) & df.TIMEn.dt.hour.between(0,4)