【问题标题】:How can I get the last 10 records of each day?如何获取每天的最后 10 条记录?
【发布时间】:2021-07-23 06:16:20
【问题描述】:

我有一个 DataFrame,每天有 96 条记录,连续 5 天。

数据: {'value': {Timestamp ('2018-05-03 00:07:30'): 13.02657778, Timestamp ('2018-05-03 00:22:30' ): 10.89890556, Timestamp ('2018-05-03 00:37:30'): 11.04877222,...(更多天数)

数据类型: DatetimeIndex(索引列)和 float64(“流”列)。

我想在每天的指定小时 (H) 之前保存 10 条记录。

我只做了一天:

df.loc[df['time'] < '09:07:30'].tail(10)

【问题讨论】:

  • 请试试这个df.groupby('time').tail(10)
  • 不工作。返回初始数据集的所有行。 Thk(注意我的代码行是错误的,因为它假设时间是一列)
  • 我认为您需要在 groupby 之前添加一些过滤器,所以现在将其添加为答案。

标签: python time-series timestamp


【解决方案1】:

您可以使用pandas.Grouper(另请参阅this discussion)按天(或按月或按其他范围)对数据进行分组。

在你的情况下,使用类似的东西:

df.groupby(pd.Grouper(freq='D')).tail(10)

编辑:

要在给定时间之前获取所有行,请使用 df.loc[df.index.hour &lt; H](正如 simpleApp 的回答中已经提出的那样),其中 H 是整数值的小时。

所以在一行中:

df.loc[df.index.hour < H].groupby(pd.Grouper(freq='D')).tail(10)

【讨论】:

  • 它有效,但只保存每天的最后 10 条记录。我想在指定时间 (H) 之前保存 10 条记录。
  • @catsandc:您似乎已经有了解决方案(在您的问题中)。编辑了我的答案。
【解决方案2】:

我建议按小时过滤记录,然后按日期分组。

数据设置:

import pandas as pd
start, end = '2020-10-01 01:00:00', '2021-04-30 23:30:00'
rng = pd.date_range(start, end, freq='5min')
df=pd.DataFrame(rng,columns=['DateTS'])

设置小时

noon_hour=12 # fill the hour , for filteration

结果,如果 head 或 tail 对您的数据不起作用,则需要对其进行排序。

df_before_noon=df.loc[df['DateTS'].dt.hour < noon_hour] # records before noon
df_result=df_before_noon.groupby([df_before_noon['DateTS'].dt.date]).tail(10) # group by date

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 2017-12-15
    • 2019-12-28
    • 2022-01-19
    • 2023-01-28
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多