python-3.x - 熊猫数据框按天分组并在固定时间找到超过值的第一个值
问题描述
我有一个日期时间索引数据框,其中包含数年的日内数据,增量为 2 分钟。我想按天分组,并包括每天 06:30:00 超过价格的第一行。
df:
Price
2009-10-12 06:30:00 904
2009-10-12 06:32:00 904
2009-10-12 06:34:00 904.5
2009-10-12 06:36:00 905
2009-10-12 06:38:00 905.5
2009-10-13 06:30:00 901
2009-10-13 06:32:00 901
2009-10-13 06:34:00 901
2009-10-13 06:36:00 902
2009-10-13 06:38:00 903
我尝试使用 .groupby 和 .apply 与 lambda 函数按天分组,并包括所有超过 06:30:00 值的行,但出现错误。
onh = pd.to_datetime('6:30:00').time()
onhBreak = df.groupby(df.index.date).apply(lambda x: x[x > x.loc[onh]])
ValueError: Can only compare identically-labeled Series objects
期望的输出:
Price
2009-10-12 06:34:00 904.5
2009-10-13 06:36:00 902
*如果这些行是groupby中的值,那也很好
任何帮助表示赞赏。
解决方案
这里我们groupby
需要idxmax
df = df.to_frame('value')
df['check'] = df.index.time>onh
subdf = df.loc[df.groupby(df.index.date)['check'].idxmax()]
Out[237]:
value check
2009-10-12 00:00:00 900.0 False
2020-05-29 13:08:00 3052.0 True
subdf = subdf[subdf['check']]
推荐阅读
- java - 如何在 `java.util.Date` 中添加`Period`?
- c++ - 如何在 Windows 上正确忙等待?
- python - Python - 我如何按 X、Y 坐标对其进行排序
- python - 我怎样才能很好地可视化混淆矩阵?
- package - 如何为 Symfony 创建一个作曲家包
- arrays - 使用 Nifi 将带有数组的 json 插入 BigQuery 的问题
- java - 如何使用多行文本呈现网页java spring boot
- angular - 使用 ngIf 单击外部指令?
- apache-kafka - kafka 中的最大消息保留
- gsm - 如何使用 energia 将 msp430G2553 与 GSM 模块连接