我正在尝试创建5个成员的10个不同子集,而不用此数据进行替换(在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
155 ZX27683R 1 1
156 MZ63663M 1 1
157 FT35723P 1 1
158 NX90823W 1 1
159 SC16809F 1 1
160 TX83955R 1 1
161 JA79273O 1 1
162 SK66781D 1 1
163 UK69813N 1 1
164 CX01143B 1 1
165 MT45485A 1 1
166 LJ25921O 1 1
我尝试对range()中的_使用很多random.sample()变体。 什么都没用。到目前为止,堆栈溢出似乎都没有给我所需的结果。
答案 0 :(得分:1)
这似乎是一个组合问题。这是一个解决方案: 您应该创建列表,说L。然后确定子集的大小,说r。之后是代码:
from itertools import combinations
combinations(L,r)
但是,如果您不想确定要创建的集合的大小,则可以按以下方式使用随机模块:
import random
from itertools import combinations
combinations(L,r = random(a,b))
在这种情况下,这将从列表L中创建一个随机的r组(在a和b之间的随机整数)元素。如果要执行10次,可以创建一个for
循环。
我希望对您有用。
答案 1 :(得分:1)
让我们假设我们有lines
变量和您的数据集的迭代器。然后:
from random import sample
# Chunk length
chunk_len = 2
# Number of chunks
num_of_chunks = 5
# Get the sample with data for all chunks. It guarantees us that there will
# be no repetitions
random_sample = sample(lines, num_of_chunks*chunk_len)
# Construct the list with chunks
result = [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']]
答案 2 :(得分:1)
这是使用pandas
的解决方案。
假设master
是使用pandas
创建的主数据框,则可以执行以下操作:
shuffled = master.sample(frac=1)
这将创建主数据帧的副本,其中行随机重新排序。有关堆栈sample
的信息,请参见this answer,有关堆栈溢出的信息,请参见the docs。
然后,您可以按顺序依次构建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)
将它们全部打印出来,并通过肉眼确认没有重复。