获取时间序列数据框中每个日期的最后一个条目

时间:2019-01-11 12:34:02

标签: python-3.x pandas

我有一个数据框,其中包含一个名为date_and_time的列和一个关联的value列。我想在数据框中输入每个日期的最后一个条目。当然,groupby不是很有用,因为没有df.groupby('date_and_time').last()函数。

这是一个示例数据框:

    date_and_time   value
07/01/2019 09:52    41998
07/01/2019 09:57    21183
07/01/2019 10:02    29730
07/01/2019 10:07    27855
07/01/2019 10:12    29359
08/01/2019 10:17    42057
08/01/2019 10:22    27307
08/01/2019 10:27    37205
08/01/2019 10:32    10969
08/01/2019 10:37    14085
09/01/2019 10:42    23218
09/01/2019 10:47    18972
09/01/2019 10:52    11286
09/01/2019 10:57    36341
09/01/2019 11:02    16913
10/01/2019 11:07    12131
10/01/2019 11:12    46921
10/01/2019 11:17    22412
10/01/2019 11:22    28503
10/01/2019 11:27    33918

这就是我最后想要的内容:

date_and_time   value
07/01/2019 10:12    29359
08/01/2019 10:37    14085
09/01/2019 11:02    16913
10/01/2019 11:27    33918

1 个答案:

答案 0 :(得分:1)

通过to_datetime将第一列转换为日期时间:

df['date_and_time'] = pd.to_datetime(df['date_and_time'], format='%d/%m/%Y %H:%M')

如有必要排序:

df = df.sort_values('date_and_time')

然后通过date进行汇总:

df = df.groupby(df['date_and_time'].dt.date).last().reset_index(drop=True)

或者将boolean indexingduplicated一起使用,并通过~反转掩码:

df = df[~df['date_and_time'].dt.date.duplicated(keep='last')]

如果需要相同的格式,最后使用strftime

df['date_and_time'] = df['date_and_time'].dt.strftime('%d/%m/%Y %H:%M')

不转换为日期时间的解决方案-split空格,然后选择第一个值-这里date s:

df = df.groupby(df['date_and_time'].str.split().str[0]).last().reset_index(drop=True)

df = df[~df['date_and_time'].str.split().str[0].duplicated(keep='last')]