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

如何从dataframe中提取匹配指定分组顺序的随机有序序列

解决方案

要实现按指定分组顺序随机抽取对应行,核心逻辑是先预存各分组的行作为采样池,再按传入的分组序列逐次采样拼接,完全匹配目标顺序,同时支持同一分组重复抽取的场景。

实现代码

import pandas as pd

# 示例数据构造
df = pd.DataFrame({
    'ID': [1,2,3,12,13,84,85],
    'Field_1': ['ABC','BCD','EEJ','KAS','OEP','HJH','YSU'],
    'Field_2': ['XYZ','ABF','KYA','UUY','PLO','HIE','SAR'],
    'Group': ['B','B','B','Z','Z','N','N']
})

# 1. 预构建各分组的采样池,仅需执行一次
group_pool = dict(tuple(df.groupby('Group')))

def sample_by_group_order(target_order: list, replace: bool = False) -> pd.DataFrame:
    """
    按指定分组顺序返回随机采样的行
    :param target_order: 目标分组序列,如['B','Z','N','B']
    :param replace: 是否允许重复抽取同一行,默认不允许
    """
    sample_list = []
    for group_name in target_order:
        # 从对应分组随机抽1行
        sampled_row = group_pool[group_name].sample(n=1, replace=replace)
        sample_list.append(sampled_row)
    # 按顺序拼接结果并重置索引
    return pd.concat(sample_list, ignore_index=True)

# 调用示例
result = sample_by_group_order(['B','Z','N','B'])
print(result)

效果说明

  • 输出的行顺序完全和传入的target_order一致,示例调用返回的行顺序依次是B组随机行、Z组随机行、N组随机行、B组另一随机行
  • 如果某分组需要抽取的次数超过该分组的总行数,设置replace=True即可允许重复抽取同一行
  • 多次调用时预构建的group_pool可复用,无需重复执行分组逻辑,性能更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:02