如何过滤Python数据帧中的行,在要fi的列中使用重复的值

2024-09-28 01:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

整体背景:

我有一个数据框,它包含了从早上5点到晚上8点连续几天每5分钟的观察结果。我需要过滤每天早上9点到晚上5点的所有观察结果。你知道吗

输入数据框如下所示:

Date Time
2019-09-20 05:00:00,..,..
2019-09-20 05:05:00,..,..
...
2019-09-20 09:00:00,..,..
...
2019-09-20 17:00:00,..,..
2019-09-20 17:05:00,..,..
...
2019-09-20 20:00:00,..,..
2019-09-21 05:00:00,..,..
2019-09-21 05:05:00,..,..
...
2019-09-21 09:00:00,..,..
...
2019-09-21 17:00:00,..,..
2019-09-21 17:05:00,..,..
...
2019-09-21 20:00:00,..,..

输出数据帧应如下所示:

2019-09-20 09:00:00,..,..
...
2019-09-20 17:00:00,..,..
2019-09-21 09:00:00,..,..
...
2019-09-21 17:00:00,..,..

目前采取的步骤

为了提取上午9点到下午5点之间的行,我通过 使用矢量化数据操作提取小时、分钟和秒 所以输入数据帧将具有类似于

Date Time, Number of seconds since midnight
2019-09-20 05:00:00,xxxx,..,..
2019-09-20 05:05:00,yyyy,..,..
...
2019-09-21,05:00:00,xxxx,..,..
2019-09-21, 05:05:00,yyyy,..,..

请注意,对于每天相同的时间,秒数将保持不变 现在我希望能在早上9点到下午5点提取所有的行

df[(df['Number of seconds since midnight'] > (nseconds for 9 am from midnight)) &  ((df['Number of seconds since midnight'] < (nseconds for 5 pm from midnight))

但是我只从最后一天上午9点到下午5点之间得到了行。 在我看来,这似乎是忽略了所有重复行与ehs相同的计算。你知道吗

有人能建议一个可能的解决方案,不迭代每一行,并使用矢量化的操作,因为数据库非常大


Tags: of数据fromnumberdffordatetime
2条回答

使用日期时间.hour在数据的dateTime对象中,可以根据大于9、小于或等于5或(17)的数据过滤数据,然后将其添加到生成的数据帧或数组中

下面的代码可能会对您有所帮助

dummy = []
for d in dt:
    if d.hour>=9 and d.hour<=17: dummy.append(d)
print(dummy)

我已经从下面创建了我的示例数据,它也可以在多个日期工作

start = datetime.datetime(2000, 1, 1)
dt = np.array([start + datetime.timedelta(hours=i) for i in range(24)])

欢迎任何更正。你知道吗

代码

from datetime import datetime

# Set Threshold
morning = datetime.strptime('9:00:00', "%H:%M:%S").time()
evening = datetime.strptime('17:00:00', "%H:%M:%S").time()

# Check conditions
check_cond = df['Time'].apply(lambda x: datetime.strptime(x, "%H:%M:%S").time() >= morning and datetime.strptime(x, "%H:%M:%S").time() <= evening)
df['True_False'] = check_cond

print(df[df['True_False'] == True])

结果
检索数据帧或将其分配给满足上述条件的另一个数据帧

相关问题 更多 >

    热门问题