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

如何提取DataFrame中每30分钟时刻的行数据?

解决方法

首先排查关键问题,并提供两种可行方案:

1. 先确保时间列是datetime类型

resample 仅对datetime类型的列生效,如果你的agenttimestamp是字符串或其他非时间类型,先做转换:

import pandas as pd
df['agenttimestamp'] = pd.to_datetime(df['agenttimestamp'])

2. 方案一:直接筛选符合条件的行(推荐,若原始数据存在目标时间点)

如果数据里刚好有09:30、10:00这类精确时间点的记录,直接筛选分钟数为0或30的行即可:

# 筛选分钟为0/30的行
filtered_df = df[df['agenttimestamp'].dt.minute.isin([0, 30])]

# 若要求时间精确到整分(无秒级偏差),补充秒的筛选条件
filtered_df = df[
    df['agenttimestamp'].dt.minute.isin([0, 30]) & 
    (df['agenttimestamp'].dt.second == 0)
]

3. 方案二:用resample聚合(适用于原始数据无精确时间点的情况)

你之前用resample没得到预期结果,是因为没有指定聚合函数——resample默认只是创建时间区间分组,不会自动筛选或聚合数据。如果要提取每个30分钟区间的首行/末行(假设数据已按时间排序):

# 按30分钟区间分组,取每个区间的第一行
resampled_df = df.resample('30T', on='agenttimestamp').first().reset_index()

# 或者取每个区间的最后一行
resampled_df = df.resample('30T', on='agenttimestamp').last().reset_index()

如果需要自定义聚合逻辑(比如取区间内_value的平均值),可以用agg()方法:

resampled_df = df.resample('30T', on='agenttimestamp').agg({
    'item': 'first',
    'id': 'first',
    '_value': 'mean'
}).reset_index()

内容的提问来源于stack exchange,提问作者Nishad Nazar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:30:55