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

Pandas DataFrame分组需求:为每个Task分配唯一TaskClass观测值

按Task随机抽取唯一TaskClass记录的解决方案

嘿,这个需求其实用Pandas自带的分组抽样功能就能轻松搞定,完全适配你数千个Task的大规模场景,给你详细拆解下:

核心实现代码

假设你的数据存储在df这个DataFrame里,一行代码就能解决问题:

# 按Task分组,每组随机选1行
result_df = df.groupby('Task', group_keys=False).sample(n=1)

关键参数解释

  • groupby('Task'):把数据按Task字段分组,确保每个Task单独成组处理
  • sample(n=1):每组随机抽取1条记录,正好满足每个Task对应唯一TaskClass的要求
  • group_keys=False:避免结果里多出分组相关的索引,让输出结构和原DataFrame保持一致
  • (可选)如果需要固定随机结果方便测试,可以加random_state=42这类固定数值,去掉的话每次运行都会得到不同的随机抽样结果

针对你提供的多TaskClass示例验证

比如你给出的包含4种TaskClass的测试数据:

Year Month Task TaskID TaskClass TaskClassID SomeValue
2019 11 A 1 X 10 6.58
2019 11 A 1 Y 20 1.58
2019 11 A 1 Z 30 1.00
2019 11 A 1 W 40 0.25
2019 11 B 2 X 10 6.58
2019 11 B 2 Y 20 1.58
2019 11 B 2 Z 30 1.00
2019 11 B 2 W 40 0.25

运行代码后会得到类似这样的随机输出(每次结果可能不同):

YearMonthTaskTaskIDTaskClassTaskClassIDSomeValue
201911A1W400.25
201911B2X106.58

进阶玩法:按权重抽样(可选)

如果想让某些TaskClass被选中的概率更高(比如SomeValue越大越容易被选),可以给sample加weights参数:

# 按SomeValue的大小作为抽样权重,值越大越容易被选中
result_df = df.groupby('Task', group_keys=False).sample(
    n=1, 
    weights='SomeValue'
)

性能说明

这个方法处理数千个Task完全没问题,groupby和sample都是Pandas底层优化过的操作,在大规模数据集上的效率很高,不会出现性能瓶颈。

内容的提问来源于stack exchange,提问作者Nuno Heli Beires

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:22:52