如何使用Python获取DataFrame中每日的最后一份快照数据
前提操作
首先确认你的DataFrame索引为datetime类型,若未转换先执行以下代码:
import pandas as pd df.index = pd.to_datetime(df.index)
核心实现代码
写法1(逻辑简洁,性能更优)
# 生成筛选掩码:行索引等于所属日期的最大时间点 mask = df.index == df.groupby(df.index.date).transform(lambda x: x.index.max()).iloc[:,0] result = df[mask]
写法2(步骤拆分,更适合初学者理解)
# 先提取所有日期对应的最大时间点列表 daily_max_time = df.groupby(df.index.date).apply(lambda group: group.index.max()) # 筛选索引属于最大时间点的所有行 result = df[df.index.isin(daily_max_time)]
逻辑说明
df.index.date从时间索引中提取日期部分作为分组依据,不会丢失原索引的时分秒信息- 两种写法都不限制每日最后一个时间点的行数,不管对应1行还是N行都能完整保留,完全符合需求
原有代码错误原因
df.groupby(df.index).last()是按完整时间戳分组,每个时间点只会返回最后1行,同一个时间点的多行数据会被合并丢失groupby(df.index.timestamp)本质还是按完整时间戳分组,逻辑和第一种错误写法一致,额外取iloc[[0,-1]]还会返回每个时间点的首行,完全不符合需求
内容的提问来源于stack exchange,提问作者Cyan
相关产品推荐
相关产品推荐

