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

Python如何从字典存储的各DataFrame中抽取连续随机比例的有序行

你原来的代码问题出在pandas.DataFrame.sample()方法默认返回的抽样结果是乱序的,要保留原始行顺序,有两种可行实现:

方案1:最小改动适配原有代码

只需要在sample()后追加sort_index()方法,按原始DataFrame的索引排序即可恢复原有行顺序,修改后代码如下:

random.seed(100)      # 固定随机种子保证可复现
Name = {}
for sheet in new:
    k = round(random.uniform(0.2,0.8),2) # 生成0.2到0.8之间的随机抽样比例
    # 抽样后按原始索引排序,保留行顺序
    Name[sheet] = new[sheet].sample(frac=k, random_state=50).sort_index()

这个方案适合你的当前场景:你的DataFrame用的是默认从0开始递增的整数索引,索引的大小就对应行的先后顺序。

方案2:无排序开销的通用方案

如果你的DataFrame索引不是默认的递增整数,也可以直接生成按顺序排列的抽样行位置,直接按位置取数,不需要额外排序:

import random
import pandas as pd

random.seed(100)
Name = {}
for sheet in new:
    df = new[sheet]
    total_rows = len(df)
    # 生成0.2~0.8的抽样比例
    sample_frac = round(random.uniform(0.2, 0.8), 2)
    sample_count = int(total_rows * sample_frac)
    # 随机选指定数量的行位置,排序后按位置取值,天然保留原顺序
    selected_pos = sorted(random.sample(range(total_rows), sample_count))
    Name[sheet] = df.iloc[selected_pos]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:15:03