猿问

从单个数据帧创建多个子集,无需替换

我正在尝试创建 10 个不同的 5 个成员子集,而无需从这些数据中替换(在 Python 中):


      Member CIN Needs Assessment Network Enrolled

117   CS38976K                1                1

118   GN31829N                1                1

119   GD98216H                1                1

120   VJ71307A                1                1

121   OX22563R                1                1

122   YW35494W                1                1

123   QX20765B                1                1

124   NO50548K                1                1

125   VX90647K                1                1

126   RG21661H                1                1

127   IT17216C                1                1

128   LD81088I                1                1

129   UZ49716O                1                1

130   UA16736M                1                1

131   GN07797S                1                1

132   TN64827F                1                1

133   MZ23779M                1                1

134   UG76487P                1                1

135   CY90885V                1                1

136   NZ74233H                1                1

137   CB59280X                1                1

138   LI89002Q                1                1

139   LO64230I                1                1

140   NY27508Q                1                1

141   GU30027P                1                1

142   XJ75065T                1                1

143   OW40240P                1                1

144   JQ23187C                1                1

145   PQ45586F                1                1

146   IM59460P                1                1

147   OU17576V                1                1

148   KL75129O                1                1

149   XI38543M                1                1

150   PO09602E                1                1

151   PS27561N                1                1

152   PC63391R                1                1

153   WR70847S                1                1

154   XL19132L                1                1

我尝试对 range() 中的 _ 使用许多 random.sample() 变体。没有任何工作。到目前为止,堆栈溢出似乎没有给我我需要的结果。


湖上湖
浏览 117回答 3
3回答

一只斗牛犬

这里有一个使用pandas.假设这master是您使用 创建的主数据框pandas,您可以执行以下操作:shuffled = master.sample(frac=1)这会创建一个主数据框的副本,其中的行随机重新排序。请参阅stackoverflow 上的此答案或该方法的文档sample。然后,您可以简单地按顺序构建 10 个较小的五行数据框。subsets = []for i in range(10):    subdf = shuffled.iloc[(i*5):(i+1)*5]    subsets.append(subdf)subsets是包含您的小数据框的列表。做:for sub in subsets:    print(sub)将它们全部打印出来并通过肉眼验证没有重复。

慕虎7371278

这似乎是一个组合问题。这是一个解决方案:你应该创建你的列表,比如 L。然后你决定子集的大小,比如 r。之后是代码:from itertools import combinations combinations(L,r)但是,如果您不想决定要创建的集合的大小,则可以使用 random 模块,如下所示:import random from itertools import combinations combinations(L,r = random(a,b))在这种情况下,这将从列表 L 中创建一组随机的 r(a 和 b 之间的随机整数)元素。如果你想这样做 10 次,你可以做一个for循环。我希望这对你有用。

白猪掌柜的

假设我们有lines一个带有数据集迭代器的变量。然后:from random import sample# Chunk lengthchunk_len = 2# Number of chunksnum_of_chunks = 5# Get the sample with data for all chunks. It guarantees us that there will# be no repetitionsrandom_sample = sample(lines, num_of_chunks*chunk_len)# Construct the list with chunksresult = [random_sample[i::num_of_chunks] for i in range(num_of_chunks)]result将返回:[['123   QX20765B                1                1',  '118   GN31829N                1                1'], ['127   IT17216C                1                1',  '122   YW35494W                1                1'], ['138   LI89002Q                1                1',  '126   RG21661H                1                1'], ['120   VJ71307A                1                1',  '121   OX22563R                1                1'], ['143   OW40240P                1                1',  '142   XJ75065T                1                1']]
随时随地看视频慕课网APP

相关分类

Python
我要回答