使用Python的伪随机化

2024-09-26 22:50:03 发布

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

我试图通过应用特定的标准来对数据帧中条目的顺序进行伪随机

我在这里找到了一条非常有用的线索:thread。为了提供一些背景信息,让我们假设我有一个如下的数据帧:

data2 = [['fire', "a", "1"], ['smoke', "b", "1"], ['honeybee', "a", "2"], ['curtain', "c", "2"]] 
df2 = pd.DataFrame(data2, columns = ['item', 'label1', "label2"]) 

我希望每次数据帧都随机重新排序,这样label1label2在下一行中都不会重复

例如,这并不好,因为label1是可以的,但在label2中有两个连续的2

item    label1    label2
fire    a         1
curtain c         2
honey   a         2
smoke   b         1

为了实现这一点,我运行以下代码:

import pandas as pd

randomized = False
while not randomized:
    exp_df_2 = df2.sample(frac=1).reset_index(drop=True) #df2 is the original dataframe
    # check for repeats
    for i in range(0, len(exp_df_2)):
        try:
            if i == len(exp_df_2) - 1:
                randomized = True
            elif exp_df_2['label1'][i] != exp_df_2['label1'][i+1] and exp_df_2['label2'][i] != exp_df_2['label2'][i+1]:
                continue
            elif exp_df_2['label1'][i] == exp_df_2['label1'][i+1] or exp_df_2['label2'][i] == exp_df_2['label2'][i+1]:
                break
        except IndexError:
            pass

它似乎工作得很好,但我想知道它是否有一些不必要的影响。是吗

一旦我确信这段代码正在做我想做的事情,我想问一件事: 我怎样才能在限制上更加宽松

例如,如果我想为label2允许最大值两个连续的相同值,而保持对label1的限制不变,该怎么办


Tags: 数据代码truedfforitemfiresmoke

热门问题