Pandas DataFrame如何仅保留每个分钟时间单位内的第一条数据
Pandas时间序列按分钟降采样(保留各分钟第一条数据)实现方案
前置准备
首先将存储时间的字符串列转换为Pandas支持的datetime类型,方便后续时间运算:
import pandas as pd # 你给出的「天 时:分:秒.微秒」格式可被pandas自动识别,直接转换即可 df['time'] = pd.to_datetime(df['time'])
如果遇到格式识别异常,可显式指定format参数匹配你的时间格式。
核心筛选逻辑
方法1:使用drop_duplicates(代码最简,适合纯去重场景)
通过时间截断生成分钟维度的分组标识,直接去重保留每个分组第一条数据即可:
# 生成按分钟对齐的临时分组标识列 df['minute_group'] = df['time'].dt.floor('min') # 按分组去重,保留第一条后删除临时标识列 df_result = df.drop_duplicates(subset='minute_group', keep='first').drop(columns='minute_group')
方法2:使用groupby分组(扩展性强,适合后续需额外聚合运算的场景)
直接按分钟截断后的时间分组,取每组第一条数据:
df_result = df.groupby(df['time'].dt.floor('min'), as_index=False, sort=False).first()
注意事项
- 上述两种方法均默认保留原始数据的排序逻辑,每个分钟第一次出现的数据会被保留,完全匹配你要求的筛选规则
- 如果原始数据未按时间正序排列,建议先执行排序再做筛选,避免取到非分钟最早的数据:
df = df.sort_values('time').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

