我有一个名为pandas
的日期为DataFrame
的{{1}},我想查找SDate
的时间在下午2点至下午4点之间的行,像这样:
SDate
但是这样不行。如何以大多数熊猫和pythonic的方式做到这一点?
答案 0 :(得分:2)
如果您想要口罩,可以这样做:
import pandas as pd
df = pd.DataFrame(data=pd.date_range(start='1/1/2018', end='1/2/2018', freq='H'), columns=['SDate'])
mask = (df.SDate.dt.hour >= 2) & (df.SDate.dt.hour <= 4)
print(mask.values)
输出
[False False True True True False False False False False False False
False False False False False False False False False False False False
False]
在上面的示例中,df是具有datetime dtype列SDate
的DataFrame,dt是类似于datetime的属性(例如hour)的访问器对象。
答案 1 :(得分:0)
您也可以使用between_time
d = d.set_index('SDate')
d.between_time(start_time = '14:00', end_time = '16:00')
答案 2 :(得分:0)
您需要通过括号分隔条件:
s = pd.to_datetime(['2018-01-01 02:00', '2015-12-25 15:00'])
indices = np.nonzero(s.hour>=2 & s.hour<=4)[0]
# TypeError: unsupported operand type(s) for &: 'int' and 'Int64Index'
indices = np.nonzero((s.hour>=2) & (s.hour<=4))[0]
# array([0], dtype=int64)
请注意,您可以使用pd.Series.argmax
进行此计算,因为标量输出就足够了:
indices = ((s.hour>=2) & (s.hour<=4)).argmax()
# 0