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

Pandas:基于列值条件随机抽取5组连续5行数据

解决方案

要实现随机抽取5组同一AGENT下连续5天的时间序列数据,可按以下步骤操作:

1. 先确保数据按AGENT和时间排序

时间序列的"连续"必须基于时间顺序,所以第一步要把数据按AGENT分组后再按时间列排序(假设你的时间列名为DATE,请根据实际字段名修改):

import pandas as pd
import numpy as np

# 按AGENT和时间排序,重置索引保证连续行的顺序正确
df_sorted = df.sort_values(["AGENT", "DATE"]).reset_index(drop=True)

2. 随机选择AGENT并抽取连续片段

因为你需要5组数据(允许重复抽取同一AGENT的不同连续段,对应原代码的replace=True),可以先随机选5个AGENT样本,再对每个AGENT随机抽取一段连续5天的数据:

# 随机挑选5个AGENT(允许重复选中同一AGENT)
selected_agents = np.random.choice(df_sorted["AGENT"].unique(), size=5, replace=True)

final_samples = []
for agent in selected_agents:
    # 获取当前AGENT的所有数据
    agent_group = df_sorted[df_sorted["AGENT"] == agent]
    # 如果该AGENT的数据不足5天,直接跳过(也可根据需求自行调整处理逻辑)
    if len(agent_group) < 5:
        continue
    # 计算可抽取的起始索引范围
    max_start_idx = len(agent_group) - 5
    # 随机选一个起始点
    start_idx = np.random.randint(0, max_start_idx + 1)
    # 抽取连续5行数据
    consecutive_chunk = agent_group.iloc[start_idx:start_idx+5]
    final_samples.append(consecutive_chunk)

# 合并所有抽取的片段,得到最终结果
result_df = pd.concat(final_samples, ignore_index=True)

补充:批量处理每个AGENT的场景

如果需要给每个AGENT固定抽取多个连续段(比如每个AGENT抽2组,再从中筛选出总共5组),可以改用groupby.apply批量处理:

def get_consecutive_chunks(group, n_chunks=1, window=5):
    if len(group) < window:
        return pd.DataFrame()
    max_start = len(group) - window
    # 随机选n_chunks个起始点,允许重复抽取同一AGENT的同一段
    starts = np.random.choice(range(max_start + 1), size=n_chunks, replace=True)
    return pd.concat([group.iloc[s:s+window] for s in starts], ignore_index=True)

# 每个AGENT抽2组连续片段
all_chunks = df_sorted.groupby("AGENT").apply(get_consecutive_chunks, n_chunks=2).reset_index(drop=True)
# 从所有片段中取前5组
result_df = all_chunks.head(5).reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:57:19