当前位置: 首页 > 知识库问答 >
问题:

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

充普松
2023-03-14

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

我尝试使用random.sample()的许多变体来表示范围内的。什么都没用。到目前为止,堆栈溢出似乎没有给我提供所需的结果。

共有3个答案

甄正信
2023-03-14

假设我们有带有数据集迭代器的line变量。然后:

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']]
谷光誉
2023-03-14

这似乎是一个组合问题。这里有一个解决方案:你应该创建你的列表,比如L。然后你决定子集的大小,比如r。之后,这里是代码:

从迭代工具导入组合组合(L, r)

但是,如果您不想决定要创建的集合的大小,则可以使用如下随机模块:

从迭代工具导入随机组合(L, r=随机(a, b))

在这种情况下,这将从列表L中创建一组随机的r(a和b之间的随机整数)元素。如果您想这样做10次,可以为循环创建一个

我希望这对你有用。

司马高昂
2023-03-14

这里使用熊猫解决方案

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

shuffled = master.sample(frac=1)

这将创建主数据帧的副本,其中的行随机重新排序。请参阅stackoverflow上的回答或示例方法的文档。
然后,您只需按顺序构建10个较小的五行数据帧。

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

子集是包含小数据帧的列表。做:

for sub in subsets:
    print(sub)

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

 类似资料:
  • 给定一个数据帧say,包含100列和100行,我需要列的子集。我想同时索引两个(或多个)列块。 例如,我想要的是: (显然,这不起作用) 但是我想要第1列到第20列以及第55列到第57列。我可以用两个单独的操作来实现这一点,并将它们连接起来,但我想知道是否有一个功能可以让这一点只需一次(我知道R有这个功能,因此好奇)。 编辑:我在这里发现了一个类似的问题,但答案是字符串。可以进行多个子集设置的解决

  • 我需要从不同的字典中创建一个熊猫数据框架,其中键必须作为数据框架内的列名。如果数据帧没有将键列为列,则必须动态创建键,并将其作为新列附加到数据帧。 我希望输入为, 输出应该是,, 循环的第一次迭代将键作为数据框的列名称,如果没有数据框,则创建值作为第一行的数据框。 第二次迭代检查键是否作为列出现在数据帧中,如果已经出现则插入,否则创建列并插入值作为第二行。 我确实不知道如何在python中动态运行

  • 我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:

  • 我有一个DF,其中包含一个巨大的可解析元数据,作为Dataframe中的单个字符串列,我们称之为DFA,使用ColmnA。 我想通过一个函数,ClassXYZ = Func1(ColmnA)将ColmnA这一列分成多个列。这个函数返回一个具有多个变量的类ClassXYZ,现在每个变量都必须映射到新的列,比如ColmnA1、ColmnA2等。 我如何通过调用Func1一次来完成从一个数据帧到另一个数

  • 我创建了一个json文件使用python这是一个列表。每个子列表都有chart.js图表的数据,即对于x和y轴,具有和。 这是包含列表和子列表的json。 下面的代码创建了一个图表,但我希望遍历所有条目,并为每个子列表(图表的多个实例)创建图表。 如何循环遍历下面代码中列出的json文件并创建多个chart.js图表?i、 e.,等的图表。

  • 问题内容: 我有一个如下所示的pandas数据框,并通过一列保存数据组: 现在,我想创建新的数据框(名为df_w,df_x,df_y,df_z),这些数据框仅保存其原始数据中的数据,并在一些可迭代的列表(例如列表)中进行最佳组合: 有没有使用groupby,apply和/或applymap和函数来实现此目的的智能(矢量化熊猫)方法? 我当时正在考虑对数据框进行迭代,但这似乎不是很优雅。 预先感谢您