如何提取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
相关产品推荐
相关产品推荐

