python-3.x - 过滤每个日期的最大记录数的时间戳,并将过滤后的行提取到另一个 df
问题描述
我有一个带有时间戳列、另一个日期列和价格列的数据框。时间戳列更像是某个特定小时(上午 10 点到上午 11 点之间)每 5 分钟一次的数据。例如:
Timestamp EndDate Price
2021-01-01 10:00:00 2021-06-30 08:00:00 100
2021-01-01 10:00:00 2021-09-30 08:00:00 105
2021-01-01 10:05:00 2021-03-30 08:00:00 102
2021-01-01 10:05:00 2021-06-30 08:00:00 100
2021-01-01 10:05:00 2021-09-30 08:00:00 105
2021-01-01 10:10:00 2021-03-30 08:00:00 102
2021-01-01 10:10:00 2021-06-30 08:00:00 100
2021-01-02 10:00:00 2021-06-30 08:00:00 100
2021-01-02 10:00:00 2021-09-30 08:00:00 105
2021-01-02 10:00:00 2021-03-30 08:00:00 102
2021-01-02 10:00:00 2021-06-30 08:00:00 100
2021-01-02 10:05:00 2021-09-30 08:00:00 105
2021-01-02 10:05:00 2021-03-30 08:00:00 102
2021-01-02 10:05:00 2021-06-30 08:00:00 100
对于每 5 分钟一次的快照,有些以 3 条记录结束,有些以 2 条记录结束,有些以 4 条记录结束。在那一小时(或一天)内,我想提取记录集,以使该集包含最大数量的记录,因此对于上面示例中的 1 月 1 日,它应该提取 1 月 2 日的 10:05 数据它应该提取 10:00 的数据。如果有多个集合的最大记录数相同,则可以拉出当天的最晚时间。
不确定如何有效地做到这一点,也许使用 count ?
解决方案
您可以拆分 timstap 以便更好地使用,所以我这样做了:
import numpy as np
import pandas as pd
filename=(r'C:xxxxxx\Example2.xlsx')
df0=pd.read_excel(filename)
df0['new_date'] = [d.date() for d in df0['Timestamp']]
df0['new_time'] = [d.time() for d in df0['Timestamp']]
然后我们可以使用 groupby() 和 thn apply() 来计算值,如下所示:
df = df0.groupby('new_date')['new_time'].apply(lambda x:
x.value_counts().index[0]).reset_index()
推荐阅读
- c++ - 如何将全局范围函数声明为命名空间类的朋友?
- flash - WebSphere Management Center (CMC) 的闪存寿命终止意味着什么?
- python - 在python中创建包含特定列表值的列表列表
- wxpython - wxPython 方法 Freeze 将小部件变为黑色
- javascript - 如何通过shopify中的车把抓取产品手柄的最后一个字?
- python - 使用 beautifulSoup 和 selenium NBA 统计数据进行网络抓取
- python - 运行 python3.8 -m pip install pyAudio 时出现 pyAudio 错误。刚刚安装了 C++ 工具
- node.js - SyntaxError:不能在使用 jest 的模块外部使用 import 语句
- node.js - 如何验证来自 Slack Events API 的请求
- android - 使用 Gstreamer 时在 Android 中出现“不可接受的 TLS 证书”错误