我正在尝试通过应用特定条件来伪随机化数据框中条目的顺序。
我在这里找到了一个非常有用的线程:thread。为了提供一些背景,假设我有一个像这样的数据框:
data2 = [['fire', "a", "1"], ['smoke', "b", "1"], ['honeybee', "a", "2"], ['curtain', "c", "2"]]
df2 = pd.DataFrame(data2, columns = ['item', 'label1', "label2"])
我想每次对数据帧进行随机重新排序,以使label1
和label2
都不会在下一行中重复。
例如,因为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
的限制保持不变,则该怎么做?