使用Python进行伪随机化

时间:2019-12-10 14:47:16

标签: python pandas dataframe random

我正在尝试通过应用特定条件来伪随机化数据框中条目的顺序。

我在这里找到了一个非常有用的线程: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允许 maximum 个最大值,连续两个相同的值,而对label1的限制保持不变,则该怎么做?

0 个答案:

没有答案