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
相关产品推荐
相关产品推荐

