Как случайным образом выбрать набор данных с определенными ограничениями на два логических условия с помощью Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как случайным образом выбрать набор данных с определенными ограничениями на два логических условия с помощью Python?

Сообщение Anonymous »

Я работаю с набором данных из 2500 образцов, и мне нужно извлечь случайное подмножество из 666 образцов, удовлетворяя при этом определенным условиям на основе двух логических столбцов.
Набор данных (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.
Существует ли рекомендуемый способ достижения такого типа ограниченная выборка в Python?
Будем очень признательны за любые примеры кода или библиотеки, которые могут помочь.
Заранее спасибо.
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»