python - 如何在要过滤的列中过滤具有重复值的 Python pandas 数据框中的行
问题描述
整体背景:
我有一个数据框,其中包含从早上 5 点开始到晚上 8 点结束的每五分钟的观察数天。我需要过滤每天从早上 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 ame calue。
任何人都可以提出一个可能的解决方案,它不会遍历每一行并使用矢量化操作,因为数据库非常大
解决方案
使用数据中 dateTime 对象中存在的 dateTime.hour,然后您可以根据大于 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)])
欢迎任何更正。
推荐阅读
- kotlin - 初始化后如何更改 Kotlin 中字符串的值?
- python - 从批处理文件启动时“ImportError: DLL load failed while importing _ssl”
- powershell - Powershell:指定电子邮件:密码与随机数据之间
- arrays - 为什么 Array.filter 的谓词返回类型为未知(而不是布尔值)?
- javascript - 反应钩子 | useEffect :为什么这两个钩子都有一个依赖 lint 错误,但不是两个?
- c# - 显示数量来自数据库且价格由用户输入的每一行的总价
- c++ - C++ 长整数显示
- html - 即使加载了所有内容,Angular 应用程序也会在 iframe 中显示白页
- r - 将前导零添加到特定行
- python - 列表在被要求这样做之前附加字典