You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas移除DataFrame中每日的首个分钟数据?

我来帮你搞定这个需求——要移除每个日期首个分钟内的所有记录,我们可以利用Pandas的datetime处理和分组功能轻松实现,具体步骤和代码如下:

1. 先确保索引是datetime类型

首先得把你的quote_ts索引转换成datetime格式,这样才能方便后续的时间操作:

import pandas as pd

# 你的原始数据
df = pd.DataFrame({
    'quote_ts': ['2020-05-15 14:01:00.522517', '2020-05-15 14:01:00.599999', 
                 '2020-05-15 15:00:01.234517', '2020-05-16 14:00:00.312518', 
                 '2020-05-16 14:01:00.582517', '2020-05-17 14:00:00.122983', 
                 '2020-05-17 14:02:00.524567', '2020-05-18 14:00:00.522517'],
    'price': [1000, 1200, 1300, 1000, 1400, 1800, 1900, 1600]
})
df = df.set_index('quote_ts')

# 转换索引为datetime类型
df.index = pd.to_datetime(df.index)

2. 标记并过滤首个分钟的记录

接下来,我们要为每个日期找到它的首个分钟区间,然后过滤掉该区间内的所有行:

# 给每条记录生成精确到分钟的时间标识
df['minute'] = df.index.floor('min')

# 用transform给每个日期组添加"当日首个分钟"的标记
df['first_min_of_day'] = df.groupby(df.index.date)['minute'].transform('min')

# 筛选出不属于当日首个分钟的记录,同时删除中间列
result_df = df[df['minute'] != df['first_min_of_day']].drop(['minute', 'first_min_of_day'], axis=1)

看看结果是否符合预期

运行完上面的代码后,result_df就会和你想要的完全一致:

>>> result_df
                            price
quote_ts                        
2020-05-15 15:00:01.234517   1300
2020-05-16 14:01:00.582517   1400
2020-05-17 14:02:00.524567   1900

更简洁的写法(不用中间列)

如果你不想创建额外的中间列,也可以用groupby.filter一步到位:

result_df = df.groupby(df.index.date).filter(
    lambda group: group.index.floor('min') != group.index.floor('min').min()
)

这个逻辑是对每个日期分组,只保留那些时间的分钟区间不等于该组最早分钟区间的行,结果和上面完全一样。

内容的提问来源于stack exchange,提问作者Dario Federici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:42:39