【问题标题】:How to filter dataframe with selecting only last row of every hour?如何通过仅选择每小时的最后一行来过滤数据框?
【发布时间】:2019-08-26 15:00:54
【问题描述】:

数据不一致。

我尝试使用
df.Timestamp.dt.hour 过滤 DataFrame 仅提供几小时,
df.Timestamp.dt.minute 仅提供几分钟。

例如,我需要过滤每个小时的最后一个条目,例如 1:58、2:54、3:36、4:​​44 等。

我只需要更有效的方法,而不是解释:)

【问题讨论】:

  • 你能看看stackoverflow.com/questions/20109391/… - 这样你就可以edit 你的问题放到一个可以用示例和你的尝试代码回答的位置吗?
  • 我刚刚发现,唯一的方法是要么将每小时减少到平均值/最小值/最大值,要么编写一个函数来保存上次审查的时间戳并与新的时间戳进行比较 - 这不是有效的方式。我在 pandas 中没有找到任何函数(“python 时间序列函数”),但仍然会在 R lang 中查找。为数据添加额外的小时和分钟的另一个想法。时间戳和插入所有数据对于大量数据来说也是个坏主意(我有 2005-2019 年的数据)
  • 不一定正确... zipa 的答案与我的想法一致,但这个问题没有示例输入和输出 - 任何人都无法测试...

标签: python pandas dataframe time-series


【解决方案1】:

我认为这应该可行:

df.sort_values('Date').groupby([df['Date'].dt.date, df['Date'].dt.hour], as_index=False).last()

【讨论】:

  • 取决于输入 - 可能需要强制 df.sort_values('Date') 以确保 .last() 实际上是最后一个
  • @JonClements 完全正确,已对排序数据进行了测试,但未包含该数据。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2019-05-07
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多