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

2024-06-24 12:59:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建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
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

我试过使用许多不同的随机抽样()表示范围内的()。 什么都没用。到目前为止,没有任何关于堆栈溢出的信息能够提供我所需要的结果。你知道吗


Tags: 数据成员network子集memberassessmentneedscin
3条回答

这似乎是一个组合问题。这里有一个解决方案: 你应该创建你的列表,比如说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循环。你知道吗

我希望这对你有用。你知道吗

假设我们有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']]

这里是一个使用pandas的解决方案。你知道吗

假设master是用pandas创建的主数据帧,您可以执行以下操作:

shuffled = master.sample(frac=1)

这将创建一个主数据帧的副本,其中的行被随机重新排序。参见stackoverflow上的this answerthe docs中的sample方法。
然后,您可以简单地构建10个较小的数据帧,其中5行按顺序排列。你知道吗

subsets = []
for i in range(10):
    subdf = shuffled.iloc[(i*5):(i+1)*5]
    subsets.append(subdf)

subsets是包含小数据帧的列表。执行:

for sub in subsets:
    print(sub)

把它们全部打印出来,用肉眼确认没有重复。你知道吗

相关问题 更多 >