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

如何实现每次打印时从DataFrame df0随机生成20条记录的df1子集?

问题描述

我有一个包含100条记录的DataFrame df0,希望每次打印df1时,都能生成一个包含20条记录的子集。该子集的记录从df0中随机选取且顺序随机,同时保持列数与df0一致,所有df1中的数据均来自df0。

示例:
df0 结构如下:

caloriesdurationname
042050Ana
138040Mike
............
9939045James

第一次执行print(df1),输出的随机子集:

caloriesdurationname
042050Ana
123010Joe
............
1938042Eli

第二次执行print(df1),输出另一组随机子集:

caloriesdurationname
062036Megan
139045James
............
1943042Rick

以此类推……

解决方案

可以利用Pandas的sample()方法结合动态属性或函数,实现每次访问/调用时生成新的随机子集。

方法1:使用@property装饰器(动态属性)

将df1定义为动态属性,每次访问都会重新生成随机子集:

import pandas as pd

# 假设df0是已存在的100条记录的DataFrame
@property
def df1():
    # 随机选取20条记录,重置索引
    return df0.sample(n=20).reset_index(drop=True)

# 使用示例
print(df1)  # 第一次生成随机子集
print(df1)  # 第二次生成全新的随机子集

方法2:定义函数

如果更习惯用函数调用,也可以定义一个生成子集的函数:

def get_random_subset():
    return df0.sample(n=20).reset_index(drop=True)

# 使用示例
print(get_random_subset())  # 第一次打印随机子集
print(get_random_subset())  # 第二次打印全新的随机子集
代码说明
  • sample(n=20):从df0中随机抽取20条记录,默认是不放回抽样;如果需要允许重复抽取同一条记录,添加参数replace=True即可。
  • reset_index(drop=True):重置子集的索引为0开始的连续整数,避免保留原df0的索引值导致混乱。
  • 每次调用/访问时,sample会使用不同的随机种子(默认random_state=None),确保每次结果都是随机且不同的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:15:39