import random
import pandas as pdImport
def block_randomization_random_block_with_info(
n_subjects,
block_sizes=[4, 6],
sequence=[1, 2],
seed=123
):
random.seed(seed)
assignments = []
block_ids = []
block_sizes_used = []
block_num = 1
while len(assignments) < n_subjects:
block_size = random.choice(block_sizes)
n_per_sequence = block_size // len(sequence)
block = []
for seq in sequence:
block.extend([seq] * n_per_sequence)
random.shuffle(block)
for seq in block:
assignments.append(seq)
block_ids.append(block_num)
block_sizes_used.append(block_size)
block_num += 1
assignments = assignments[:n_subjects]
block_ids = block_ids[:n_subjects]
block_sizes_used = block_sizes_used[:n_subjects]
df = pd.DataFrame({
'Subject_ID': [f'SUBJID_{i+1:03d}' for i in range(n_subjects)],
'Group': assignments,
'Block': block_ids,
'Block_Size': block_sizes_used
})
return dfdf_rand = block_randomization_random_block_with_info(
n_subjects=30,
block_sizes=[4, 6],
sequence=[1, 2],
seed=2026
)print(df_rand) Subject_ID Group Block Block_Size
0 SUBJID_001 1 1 4
1 SUBJID_002 1 1 4
2 SUBJID_003 2 1 4
3 SUBJID_004 2 1 4
4 SUBJID_005 1 2 4
5 SUBJID_006 1 2 4
6 SUBJID_007 2 2 4
7 SUBJID_008 2 2 4
8 SUBJID_009 1 3 6
9 SUBJID_010 2 3 6
10 SUBJID_011 2 3 6
11 SUBJID_012 2 3 6
12 SUBJID_013 1 3 6
13 SUBJID_014 1 3 6
14 SUBJID_015 2 4 4
15 SUBJID_016 1 4 4
16 SUBJID_017 1 4 4
17 SUBJID_018 2 4 4
18 SUBJID_019 1 5 6
19 SUBJID_020 2 5 6
20 SUBJID_021 2 5 6
21 SUBJID_022 1 5 6
22 SUBJID_023 2 5 6
23 SUBJID_024 1 5 6
24 SUBJID_025 2 6 6
25 SUBJID_026 1 6 6
26 SUBJID_027 1 6 6
27 SUBJID_028 1 6 6
28 SUBJID_029 2 6 6
29 SUBJID_030 2 6 6
print(df_rand['Group'].value_counts())1 15
2 15
Name: Group, dtype: int64