【问题标题】:Pandas dataframe groupby by day and find first value that exceeds value at fixed time熊猫数据框按天分组并在固定时间找到超过值的第一个值
【发布时间】:2020-12-19 03:11:48
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

  • 你能提供预期的输出吗?
  • 返回下面的行(这是每天超过 06:30:00 值的第一行)就足够了。我不确定 .groupby 输出会是什么样子。可能每天的第一个时间戳作为组名,下面的行作为组值。 ` 2009-10-12 06:34:00 904.5 2009-10-13 06:36:00 902 `

标签: python-3.x pandas


【解决方案1】:

我们可以做到:

mask_date = df['Date'].dt.time.gt(pd.to_datetime('06:30:00').time())
df_filtered = df.loc[mask_date.groupby(df['Date'].dt.date).idxmax()]
print(df_filtered)

输出

                 Date  Value
1 2009-10-12 06:32:00  904.0
6 2009-10-13 06:32:00  901.0

【讨论】:

  • 我提供了一个错误的样本数据集,对此感到抱歉。我已将问题中的数据集更改为更好的示例。让我换个说法:给定数据集,我想按天分组并返回每天的第一行,其值超过 06:30:00 时的值
  • 现在检查:) 请注意,如果您想包含“06:30”时间日期,您可以使用.ge() 而不是gt()
  • 也许我的问题也不清楚。我已经更新了问题,请重新阅读。我对超过 6:30 价格的价格感兴趣。数据将从 6:30 开始,因此我们不必过滤 6:30 之后的时间。
【解决方案2】:

这里我们需要groupbyidxmax

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']]

【讨论】:

  • 我提供了一个错误的样本数据集,对此感到抱歉。我已将问题中的数据集更改为更好的示例。让我重新表述问题:给定数据集,我想按天分组并返回每天的第一行,其值超过 06:30:00 的值 -
猜你喜欢
  • 2019-05-11
  • 2018-03-30
  • 2017-07-14
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
相关资源
最近更新 更多