我有一个数据框,其中包含一个名为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
答案 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 indexing
与duplicated
一起使用,并通过~
反转掩码:
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')]