我有一个pandas.Dataframe,看起来像这样:
A
date
2017-07-22 04:30:00 2707.500000
2017-07-22 05:00:00 2715.400000
2017-07-22 05:30:00 2759.300000
2017-07-22 06:00:00 2755.079086
2017-07-22 08:30:00 2840.000000
2017-07-22 09:00:00 2817.500000
2017-07-22 09:30:00 2818.900000
2017-07-22 10:00:00 2838.300000
2017-07-22 10:30:00 2865.300000
2017-07-22 11:00:00 2888.800000
... ...
... ...
2017-08-03 11:30:00 2742.000000
2017-08-03 12:00:00 2737.000000
2017-08-03 12:30:00 2732.000000
2017-08-03 13:00:00 2738.000000
2017-08-03 13:30:00 2742.800000
2017-08-03 14:00:00 2736.900000
2017-08-03 14:30:00 2733.300000
2017-08-03 15:00:00 2739.400000
..等等
我正在尝试做的是创建一个掩码,该掩码选择日期为工作日且小时数均在[X]和[Y]内的所有行。
例:
mask = SELECT ROWS where Date is a Weekday and Hour is greater than 9am and less than 5pm
我的想法一直是这样的:
newdf = df.apply(lambda x : np.where(pd.date_range(??, ??).weekday), axis=1)
我也看到了对某些“ isin ”函数的引用。
总的来说,我对此非常执着,并没有通过谷歌搜索找到更多合适的方法。任何帮助,不胜感激。
这是一种方法
In [1140]: (df.index.hour >= 9) & (df.index.hour <= 17) & (df.index.weekday < 5)
Out[1140]:
array([False, False, False, False, False, False, False, False, False,
False, True, True, True, True, True, True, True, True], dtype=bool)
In [1141]: df[(df.index.hour >= 9) & (df.index.hour <= 17) & (df.index.weekday < 5)]
Out[1141]:
A
date
2017-08-03 11:30:00 2742.0
2017-08-03 12:00:00 2737.0
2017-08-03 12:30:00 2732.0
2017-08-03 13:00:00 2738.0
2017-08-03 13:30:00 2742.8
2017-08-03 14:00:00 2736.9
2017-08-03 14:30:00 2733.3
2017-08-03 15:00:00 2739.4
而且,如果您的数据不需要工作日检查,则可以使用时间过滤功能 between_time
In [1144]: df.between_time('9:00AM', '5:00PM')
Out[1144]:
A
date
2017-07-22 09:00:00 2817.5
2017-07-22 09:30:00 2818.9
2017-07-22 10:00:00 2838.3
2017-07-22 10:30:00 2865.3
2017-07-22 11:00:00 2888.8
2017-08-03 11:30:00 2742.0
2017-08-03 12:00:00 2737.0
2017-08-03 12:30:00 2732.0
2017-08-03 13:00:00 2738.0
2017-08-03 13:30:00 2742.8
2017-08-03 14:00:00 2736.9
2017-08-03 14:30:00 2733.3
2017-08-03 15:00:00 2739.4
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句