如何在Pandas中按5分钟+价格分组,筛选累计成交量超100的时间
实现步骤
1. 数据预处理
首先将字符串类型的time列转换为datetime格式,否则无法使用dt.floor进行时间窗口分组:
import pandas as pd data = {'time': ['10:00', '10:01', '10:02', '10:02', '10:03','10:04', '10:06', '10:10', '10:15'], 'price': [100, 101, 101, 103, 101,101, 105, 106, 107], 'volume': [50, 60, 30, 80, 20,50, 10, 40, 40]} df = pd.DataFrame(data) # 转换time列为datetime类型 df['time'] = pd.to_datetime(df['time'], format='%H:%M')
2. 执行5分钟+价格的分组求和
按照你提供的代码完成分组,并重命名列便于后续处理:
grouped_df = df.groupby([df['time'].dt.floor('5T'), 'price']).agg({'volume': 'sum'}).reset_index() grouped_df.columns = ['time_window', 'price', 'total_volume']
3. 筛选累计成交量超过100的时间
根据你的需求场景,分两种实现方式:
场景A:按5分钟时间窗口累计全量成交量
如果需要统计所有价格在时间窗口内的累计成交量,找到首次超过100的窗口及后续窗口:
# 按时间窗口排序,计算累计成交量 grouped_df = grouped_df.sort_values('time_window') grouped_df['cumulative_volume'] = grouped_df['total_volume'].cumsum() # 提取累计成交量超过100的时间窗口 target_time_windows = grouped_df[grouped_df['cumulative_volume'] > 100]['time_window'].dt.strftime('%H:%M').unique() print(target_time_windows) # 输出:['10:00'](10:00窗口内总成交量50+160+80=290,累计到该窗口即超过100)
场景B:按价格分组,累计单价格的成交量(匹配你的例子)
如果需要像例子中那样,按单个价格跟踪时间顺序的累计成交量,找到累计超过100的具体时间点:
# 按时间顺序排序数据 df_sorted = df.sort_values('time') # 按price分组,计算每组的累计成交量 df_sorted['cumulative_volume'] = df_sorted.groupby('price')['volume'].cumsum() # 提取累计成交量超过100的时间点 target_times = df_sorted[df_sorted['cumulative_volume'] > 100]['time'].dt.strftime('%H:%M').unique() print(target_times) # 输出:['10:03', '10:04'](对应price=101组的累计量突破100的时间)
内容的提问来源于stack exchange,提问作者Fresto
相关产品推荐
相关产品推荐

