首页 > 解决方案 > 熊猫数据框按天分组并在固定时间找到超过值的第一个值

问题描述

我有一个日期时间索引数据框,其中包含数年的日内数据,增量为 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中的值,那也很好

任何帮助表示赞赏。

标签: python-3.xpandas

解决方案


这里我们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']]

推荐阅读