Набор данных (df) содержит следующие столбцы:
- ID
- cond_1 (логическое значение: True/False)
- cond_2 (логическое значение: True/False)
- Количество значений True в cond_1 должно быть ровно 181.
- Число значений True в cond_2 должно быть ровно 181.
- Количество значений False в cond_1< /code> должно быть ровно 485.
- Количество значений False в cond_2 должно быть ровно 485.
- Общее количество образцов в подмножестве должно составлять ровно 666.
- Поскольку это случайная выборка, подмножество не должно полностью состоять из выборок, в которых присутствуют как cond_1, так и cond_2 либо оба True, либо оба False. Должно быть сочетание True/False или False/True.
Будем очень признательны за любые примеры кода или библиотеки, которые могут помочь.
Заранее спасибо.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'ID': range(1, 2501),
'cond_1': np.random.choice([True, False], size=2500),
'cond_2': np.random.choice([True, False], size=2500)
})
# Create the groups based on conditions
group_cond1_true = df[df['cond_1'] == True]
group_cond1_false = df[df['cond_1'] == False]
group_cond2_true = df[df['cond_2'] == True]
group_cond2_false = df[df['cond_2'] == False]
# Sample from each group to meet constraints
sample_cond1_true = group_cond1_true.sample(n=181, random_state=42)
sample_cond1_false = group_cond1_false.sample(n=485, random_state=42)
sample_cond2_true = group_cond2_true.sample(n=181, random_state=42)
sample_cond2_false = group_cond2_false.sample(n=485, random_state=42)
# Combine the samples to create the final dataset
df_extracted = pd.concat([sample_cond1_true, sample_cond1_false, sample_cond2_true, sample_cond2_false]).drop_duplicates()
# Check if the conditions are met
print(f"Total length: {len(df_extracted)}")
print(f"cond_1 True count: {df_extracted['cond_1'].sum()}")
print(f"cond_2 True count: {df_extracted['cond_2'].sum()}")
print(f"cond_1 False count: {(~df_extracted['cond_1']).sum()}")
print(f"cond_2 False count: {(~df_extracted['cond_2']).sum()}")
print()
count = df_extracted.groupby(['cond_1', 'cond_2']).size()
print("Extracted counts:\n", count)
Приведенный выше код генерирует df_extracted размером 1148, а не 666.
Total length: 1148
cond_1 True count: 454
cond_2 True count: 460
cond_1 False count: 694
cond_2 False count: 688
Extracted counts:
cond_1 cond_2
False False 396
True 298
True False 292
True 162
dtype: int64
Подробнее здесь: https://stackoverflow.com/questions/790 ... ean-condit