为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2022-01-18 17:03:28
我正在尝试创建 10 个不同的 5 个成员子集,而无需从这些数据中替换(在 Python 中):      Member CIN Needs Assessment Network Enrolled117   CS38976K                1                1118   GN31829N                1                1119   GD98216H                1                1120   VJ71307A                1                1121   OX22563R                1                1122   YW35494W                1                1123   QX20765B                1                1124   NO50548K                1                1125   VX90647K                1                1126   RG21661H                1                1127   IT17216C                1                1128   LD81088I                1                1129   UZ49716O                1                1130   UA16736M                1                1131   GN07797S                1                1132   TN64827F                1                1133   MZ23779M                1                1134   UG76487P                1                1135   CY90885V                1                1136   NZ74233H                1                1137   CB59280X                1                1138   LI89002Q                1                1139   LO64230I                1                1140   NY27508Q                1                1141   GU30027P                1                1142   XJ75065T                1                1143   OW40240P                1                1144   JQ23187C                1                1145   PQ45586F                1                1146   IM59460P                1                1147   OU17576V                1                1148   KL75129O                1                1149   XI38543M                1                1150   PO09602E                1                1151   PS27561N                1                1152   PC63391R                1                1153   WR70847S                1                1154   XL19132L                1                1我尝试对 range() 中的 _ 使用许多 random.sample() 变体。没有任何工作。到目前为止,堆栈溢出似乎没有给我我需要的结果。
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

这里有一个使用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)

将它们全部打印出来并通过肉眼验证没有重复。


查看完整回答
反对 回复 2022-01-18
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

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

我希望这对你有用。


查看完整回答
反对 回复 2022-01-18
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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


查看完整回答
反对 回复 2022-01-18
  • 3 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信